包括数据归一化,标准化以及缺失值处理
1.归一化
在下图所示四个特征中, 每行组成的四个特征决定了你的label标签值,然而每个label的四个特征影响因素的大小不同,实际应用中,难以看出每个特征的有效决定程度,因此我们对每一列的特征的所有元素进行归一化处理,对每一列数据进行归一化的原因在于同一列数据属于同一种特征,能够代表多个样本(或者label)之间的差异性。
具体的代码如下:
from sklearn.preprocessing import MinMaxScaler,StandardScaler,Imputer
import jieba
import numpy as np
def mm():
'''
归一化处理
:return:
'''
mm = MinMaxScaler(feature_range=(2,3))
data = mm.fit_transform([[90,2,10,40],
[60,4,15,45],
[75,3,13,46]])
print(data)
return None
if __name__=='__main__':
mm()
具体的输出结果如下:我们归一化的范围是(2,3)
[[3. 2. 2. 2. ]
[2. 3. 3. 2.83333333]
[2.5 2.5 2.6 3. ]]
2.标准化
归一化的一个缺陷在于如果样本中存在极大或者极小的异常值,这样归一化的结果往往准确性较低,因此我们采用标准化进行改进,标准化受样本的均值影响,由于样本量较大,均值不易受个别的异常值影响。具体在sklearn库中的实现方式如下:
def stand():
'''
标准化函数
:return:
'''
std = StandardScaler()
data = std.fit_transform([[1.,-1.,3.],[2.,4.,2.],[4.,6.,-1.]])
print(data)
return None
调用的结果如下:(标准化后的均值0,方差1)
[[-1.06904497 -1.35873244 0.98058068]
[-0.26726124 0.33968311 0.39223227]
[ 1.33630621 1.01904933 -1.37281295]]
3.缺失值操作
对于样本中异常的缺失值我们一般通过插值的运算进行填补(这里采用均值填补),类似于pandas库中对缺失值的操作,具体的实现方式如下:axis=0表示按列进行填补
def im():
'''
缺失值处理
:return:
'''
im = Imputer(missing_values='NaN', strategy='mean',axis=0)
data = im.fit_transform([[1,2],[np.nan,3],[7,6]])
print(data)
return None
结果如下:
[[1. 2.]
[4. 3.]
[7. 6.]]