归一化
定义
把原始的特征数据映射到[0,1]范围内。这个[0,1]范围是默认的,可以手动指定。
计算公式
x’ = (x - min) / (max - min)
x’’ = x’ * (mx - mi) + mi
需要注意的是:x’’ 才是最终的计算结果。
其中:x表示当前值,min表示每一列特征的最小值,max表示每一列特征的最大值;
mx表示[0,1]这个指定范围内的最大值,mi表示[0,1]这个指定范围内的最小值。
代码实现
from sklearn.preprocessing import MinMaxScaler
def minMax():
"""
归一化:把原始数据映射到[0,1]之间,这个[0,1]的范围是默认的,可以手动指定。
公式:x‘ = (x - min) / (max - min) x'' = x' * (mx - mi) + mi
:return:None
"""
mm = MinMaxScaler()
data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
print(data)
return None
if __name__ == "__main__":
minMax()
归一化的缺点
归一化对数据的最大最小值比较敏感,受异常数据的影响较大,鲁棒性比较差。只适用于传统的精确小数据量的场景。
标准化
定义
把原始的特征数据映射为均值为0,方差为1的范围内。
计算公式
(x - mean) / σ
其中:mean是每一列特征的均值,σ(Sigma)是每一列的标准差。
代码实现
from sklearn.preprocessing import StandardScaler
def standard():
"""
标准化:把原始特征数据映射到均值为0,方差为1的范围内
公式:(x - mean) / σ
:return:None
"""
stand = StandardScaler()
data = stand.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
print(data)
return None
if __name__ == "__main__":
standard()
标准化的特点
由于有一定的数据量,异常数据对平均值的影响较小,对方差的影响也较小。在已有的数据量足够大的情况下,适用于现代嘈杂的大数据场景。