标签:min 缩放 stl nbsp alt ast 弹性 edit water
通过特定的数学统计方法将数据转化为算法要求的数据; 特征预处理在scikit-learn中的模块是:sklearn.preprocessing
在特征较多时,并且认为这些特征同等重要,或者算法模型涉及到距离计算时(比如K近邻),为了防止某些特征的值对算法产生的影响过大,需要将特征数据缩放至某一个区间,这样比较起来才有意义,并且可以减少程序的计算量,加快速度。
如果我们要按体形特征将人群分类,找出王五的体型与谁最接近,并且认为身高和体重对于体型评判同等重要,由于身高和体重单位不同,身高的值较大,对结果的影响可能较大,所以需要将这两个特征缩放到同一个区间,这样每个特征对结果的影响是相同的。
其中min是样本中最小值,max是样本中最大值,x为每一个特征的值
# 归一化处理
from sklearn.preprocessing import MinMaxScaler
m = MinMaxScaler()
feature_data = [[172,60], [168,68], [165,65]]
data = m.fit_transform(data)
print(data)
array([[ 1. , 0. ],
[ 0.42857143, 1. ],
[ 0. , 0.625 ]])
归一化总结:从归一化的公式中,可以看出最大值最小值在计算过程起到的作用很大,因此计算结果特别容易受到异常数据的影响,所以这种方法的稳定性很差,只适用于数据精确的场景,但是现实中数据难免有异常,所以归一化很少被用到,为了避免异常数据对结果的影响,可以使用另一种方法:标准化。
作用于每一列,其中mean为特征的平均值,σ为标准差
# 标准化处理
from sklearn.preprocessing import StandardScaler
m = StandardScaler()
data = [[172,60], [168,68], [165,65]]
stand_data = m.fit_transform(data)
print(stand_data)
array([[ 1.27872403, -1.31319831],
[-0.11624764, 1.1111678 ],
[-1.16247639, 0.20203051]])
标准化总结:标准化的应用场景非常广泛,在具有一定数据量的前提下,少量异常点对于平均值的影响不大,从而对于标准差的影响不大,进而对结果的影响也不大。
1. 归一化和标准化本质上都是线性变换,线性变换的性质决定了对数据转换之后不会“失效”,反而还能提高数据的表现,因为线性变化不改变原始数据的数值排序;2. 归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放更加“弹性”和“动态”,与整体样本的分布有很大关系;3. 归一化的输出范围在0-1之间,标准化的输出范围是负无穷到正无穷;4. 当算法涉及到距离运算时,必须先使用归一化或标准化进行标准缩放,由于对于异常数据的反应不同,标准化的使用更广泛。
标签:min 缩放 stl nbsp alt ast 弹性 edit water
原文地址:https://www.cnblogs.com/chaofan-/p/11044710.html