最大值最小值归一化&标准归一化(均值归一化,标准归一化)

 最大值最小值归一化

最大值最小值归一化&标准归一化(均值归一化,标准归一化)_第1张图片

Xjmin是Xj所在列的最小值

Xjmax是Xj所在列的最大值

问题:

能做到归一化(0-1zhi之间),但是一旦数据中有一个离群值(特别大的值)就会出现这个离群值做完归一化后特别趋近于1,而其他值特别趋近于0。

异常值特别大的话那么最大值和最小值差距比较大。所以一般不会使用最大最小值归一化。

标准归一化

经过处理的数据符合标准正态分布即均值为0,标准差为1的标准正态分布。

Xmean:X所在列的均值

Standard Deviation:X所在列的标准差

最大值最小值归一化&标准归一化(均值归一化,标准归一化)_第2张图片

标准差的公式会考虑到所有样本数据,所以受离群值影响会小一些。在样本足够多的情况下比较稳定。

但是如果使用标准归一化不一定会把数据缩放到0-1之间。

 标准差是方差的开根号:

方差为0说明所有的特征都是平均值

方差很大说明所有特征都比较离散

如果样本都是正的,那么所有的的参数θ在调整的时候可能都朝着一个方向调整。

标准归一化可以是样本缩放的同时,也可以使样本有正有负,这样就可以让不同的

θ朝着不同方向调整直接到达最优解,减少迭代次数。

最大值最小值归一化&标准归一化(均值归一化,标准归一化)_第3张图片

在用代码使用归一化的时候,测试集和训练集使用同一个scaler对象(持久化)训练,不过前提是测试集和训练集以及未来的新数据集是同分布的。

#基于sklearn代码实现最大最小值归一化

from sklearn.preprocessing import MinMaxScaler

# 数据归一化
def Maxminscale():
    # feature_range指定2-3之间的范围
    mm = MinMaxScaler(feature_range=(2, 3))
    data = mm.fit_transform([[89, 79, 1, 14], [78, 111, 33, 754], [82, 234, 11, 23]])
    print(data)

结果缩放到2-3之间最大值最小值归一化&标准归一化(均值归一化,标准归一化)_第4张图片

#基于sklearn代码实现标准归一化

from sklearn.preprocessing import StandardScaler

# 标准归一化
def standscaler():
    ss = StandardScaler()
    data = ss.fit_transform([[89, 79, 1, 14], [78, 111, 33, 754], [82, 234, 11, 23]])
    print(data)

标准差缩放后的结果

你可能感兴趣的:(预处理,机器学习,算法)