Python机器学习之三:数据转换(归一化、标准化、正则化、二值化)

示例使用数据集:Pima Indian数据集
我们先导入数据,并将特征与目标划分为X,Y:

import pandas as pd
import numpy as np
filename='pima_data.csv'
dataset=pd.read_csv(filename)
#将数据分为输入和输出数据
array=dataset.values
X=array[:,:8]
Y=array[:,8]

数据转换(归一化、标准化、正则化、二值化)

数据预处理需要根据数据本身的特性进行,有不同的格式和不同的要求,有缺失值的要,有无效数据的要,有冗余维的要,这些步骤都和数据本身的特性紧密相关。
不同的算法对数据有不同的假定,需要按照不同的方式转换数据。
本文将介绍以下四种转换数据的方法:
· 归一化(线性归一化)——MinMaxScaler()、MaxAbsScaler()
· 标准化(标准正态化,Standardize Data)——StandardScaler()
· 正则化(Normalize Data)——Normalizer()
· 二值化(Binarize Data)——Binarizer()
归一化、标准化、正则化等概念很容易混淆,各大佬也都说法不一,本人在阅读多篇文章后作出了自己的总结。与原书内容不一致,欢迎讨论。

1.数值范围缩放——归一化、标准化

Rescale Data:对数据的数值范围进行缩放,常见数值范围缩放的方法包括归一化标准化等。

1.1 归一化——不改变其数据分布

- Min-Max归一化:将数值范围缩放到 [0,1]   ——MinMaxScaler()
- MaxAbs归一化:将数值范围缩放到 [-1,1]  ——MaxAbsScaler()

归一化通过线性函数来对数值范围进行缩放,对于梯度下降回归算法神经网络K近邻算法的起到很重要的作用。

通过scikit-learn提供的 MinMaxScaler、MaxAbsScaler 函数来进行归一化数据处理。

#调整数据尺度
from sklearn.preprocessing import MinMaxScaler
#转化器
transformer=MinMaxScaler(feature_range=(0,1))
#转换数据,生成转换器的时候没有fit数据,所以这里使用fit_transform
NewX=transformer.fit_transform(X)
#设置数据的打印格式
np.set_printoptions(precision=3)
print(NewX)

1.2 标准化(正态化)——转为标准正态分布(0均值,1方差)

标准化数据(Standardize Data),又称正态化、Z-Score标准化。通过求z-score的方法,将符合正态分布的数据转换为标准正态分布(均值为0,方差为1)

标准化将数值范围缩放到0附近,并作为假定数据符合高斯分布的算法的输入。这些算法有线性回归逻辑回归线性判别分析等。

通过scikit-learn提供的StandardScaler函数来进行正态化数据处理。

#正态化数据
from sklearn.preprocessing import StandardScaler
#转换器,这里fit数据之后,使用转换器时只需要transform就行了
transformer=StandardScaler().fit(X)
#转换数据
NewX=transformer.transform(X)
print(NewX)

2.正则化——矢量距离为 1

正则化数据(Normalize Data)处理,是将每一行数据的距离处理成1(在线性代数中矢量距离为 1),适合处理稀疏数据(具有很多为 0 的数据)。

对使用权重输入的神经网络和使用距离的** K 近邻算法**的准确度的提升有显著作用。

通过scikit-learn提供的 Normalizer 函数来进行标准化数据处理。

#标准化数据
from sklearn.preprocessing import Normalizer
transformer=Normalizer().fit(X)
NewX=transformer.transform(X)
print((NewX))

3.二值化——二分数据(阈值转换)

二值数据(Binarize Data)通过设定阈值将数据转化为二值,大于阈值设置为1,小于阈值设置为0。

生成明确值特征工程增加属性的时候使用,

通过scikit-learn提供的Binarizer函数来进行二值化数据处理。

#二值化数据
from sklearn.preprocessing import Binarizer
transformer=Binarizer(threshold=0.0).fit(X)
NewX=transformer.transform(X)
print(NewX)

参考文献:

[1] 魏贞原. 机器学习:Python实践[M]. 电子工业出版社, 2018-01.

你可能感兴趣的:(机器学习:python实践,机器学习,python,算法)