特征工程2-归一化
为什么要进行数据归一
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征, 需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格
两种常用归一化方法
(1)min-max标准化(线性函数归一化)
定义:即离差标准化,是对原始数据的线性变换,使得结果映射到[0,1]之间,其本质就是将数据变换为[0,1]之间的小数。
转换公式:
注: 作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值,默认mx为1,mi为0
API介绍:
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )#feature_range数据归一化区间,默认(0,1)
* MinMaxScalar.fit_transform(X)
* X:numpy array格式的数据[n_samples,n_features]
* 返回值:转换后的形状相同的array
编程案例:
#min-max归一化
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
def minmax_demo():
data = pd.read_csv('dating.txt')
print(data)
#1、实例化一个转换器
transfer = MinMaxScaler(feature_range=(1, 2))
#调用fit_transform
data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
print("minmax归一化结果:\n",data)
"""
milage Liters Consumtime target
0 40920 8.326976 0.953952 3
1 14488 7.153469 1.673904 2
2 26052 1.441871 0.805124 1
.. ... ... ... ...
997 26575 10.650102 0.866627 3
998 48111 9.134528 0.728045 3
999 43757 7.882601 1.332446 3
[1000 rows x 4 columns]
minmax归一化结果:
[[1.44832535 1.39805139 1.56233353]
[1.15873259 1.34195467 1.98724416]
[1.28542943 1.06892523 1.47449629]
...
[1.29115949 1.50910294 1.51079493]
[1.52711097 1.43665451 1.4290048 ]
[1.47940793 1.3768091 1.78571804]]
"""
(2)、0均值标准化
定义:对原始数据的均值和标准差进行数据的标准化,经处理的数据符合标准正态分布,即均值为0,标准差为1,其实质把量纲表达式变为无量纲表达式。
转换公式:
注:公式作用于每一列,mean为每一列的平均值, σ为每一列的标准差
API介绍:
sklearn.preprocessing.StandardScaler( )
* 处理之后每列来说所有数据都聚集在均值0附近标准差差为1
* StandardScaler.fit_transform(X)
* X:numpy array格式的数据[n_samples,n_features]
* 返回值:转换后的形状相同的array
编程案例:
#0均值归一化
import pandas as pd
from sklearn.preprocessing import StandardScaler
def stand_demo():
data = pd.read_csv("dating.txt")
print(data)
#1、实例化一个转换器
transfer = StandardScaler()
#2、调用fit_transform
data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
print("归一化后数据:\n",data)
print("每一列特征的平均值:\n",transfer.mean_)
print("每一列特征的方差:\n",transfer.var_)
"""
milage Liters Consumtime target
0 40920 8.326976 0.953952 3
1 14488 7.153469 1.673904 2
2 26052 1.441871 0.805124 1
.. ... ... ... ...
997 26575 10.650102 0.866627 3
998 48111 9.134528 0.728045 3
999 43757 7.882601 1.332446 3
[1000 rows x 4 columns]
归一化后数据:
[[ 0.33193158 0.41660188 0.24523407]
[-0.87247784 0.13992897 1.69385734]
[-0.34554872 -1.20667094 -0.05422437]
...
[-0.32171752 0.96431572 0.06952649]
[ 0.65959911 0.60699509 -0.20931587]
[ 0.46120328 0.31183342 1.00680598]]
每一列特征的平均值:
[3.36354210e+04 6.55996083e+00 8.32072997e-01]
每一列特征的方差:
[4.81628039e+08 1.79902874e+01 2.46999554e-01]
"""
异常值对两种归一化方法的影响
对于min-max而言,如果出现异常点,影响了最大值和最小值,进而对最终的结果产生影响;
对于0均值而言,如果出现异常点,由于具有一定的数据量, 少量的异常点对于平均值的影响并不大,从而方差改变较小。
两种归一化方法的使用场景
(1)在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,0均值方法(Z-score standardization)表现更好。
因为:min-max(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。
(2)在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用min-max或其他归一化方法。
因为:0均值归一化方法中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。
参考文献:https://blog.****.net/program_developer/article/details/78637711