数据标准化
数据标准化主要用来消除不同特征之间的量纲的影响,量纲指的是特征的计量单位,如果特征的单位不一致,那么不同的特征不能放在一起去比较。例如在日常生活中,身高的单位时cm,体重的单位时kg,二者不能直接比较。所以可以通过数据标准化的方法,来消除不同特征之间量纲的影响。
示例数据:
Min-Max 标准化
Min-Max标准化是对原始数据进行线性转换,它需要求出特征的最小值和最大值,然后通过以下公式求出标准化值:
标
准
化
值
=
原
数
据
−
最
小
值
最
大
值
−
最
小
值
标准化值 = \frac{原数据 - 最小值}{最大值 - 最小值}
标准化值=最大值−最小值原数据−最小值
由这个公式可以知道,Min-Max标准化会把特征值映射到区间为 [0,1] 的标准化值。其中,最小的标准化值为0,最大的标准化值为1。
在sklearn模块中,使用MinMaxScaler 函数进行Min-Max标准化:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
data = pd.read_csv('../form/数据标准化.csv',encoding = 'gbk')
#特征变量
x = data[['注册时长','营收收入','成本']]
#目标变量
y = data['是否续约']
#生成标准化对象
scaler = MinMaxScaler()
#训练标准化对象
scaler.fit(x)
#将数据转换为标准化数据
scalerX = scaler.transform(x)
执行代码,得到标准化后的数据:
Min-Max标准化能够使基于距离的计算模型的效果有一定量的提升。
Z-Score标准化
Z-Score标准化基于特征的均值和标准差进行数据的标准化,计算公式如下:
标
准
化
数
据
=
原
数
据
−
均
值
标
准
差
标准化数据 = \frac{原数据 - 均值}{标准差}
标准化数据=标准差原数据−均值
经过Z-Score标准化的数据,均值为0,标准差为1。因此标准化后的数据值围绕着0上下波动,大于0说明高于均值,小于0说明低于均值。
根据标准化均值为0,标准差为1的性质,如果一个特征符合正态分布,那么:
68.26%的数据,会分布在 [-1,+1] 区间
95.44%的数据,会分布在 [-2,+2] 区间
99.74%的数据,会分布在 [-3,+3] 区间
在sklearn模块中,使用scale函数进行Z-Score标准化:
from sklearn.preprocessing import scale
#将数据转换为标准化数据
scaleX = scale(x)
执行代码,得到标准化的数据:
进行Z-Score标准化能够使基于距离的计算模型的效果有一定量的提升。
Normalizer归一化
Normalizer归一化是将每个样本缩放到单位范数(每个样本的范数为1),计算公式如下:
x
ˉ
=
x
∑
i
=
1
n
x
i
2
\bar{x} = \frac{x}{\sum_{i =1}^{n} x_i^2}
xˉ=∑i=1nxi2x
在sklearn模块中,使用Normalizer函数进行Normalizer归一化:
from sklearn.preprocessing import Normalizer
#生成标准化对象
normalizer = Normalizer()
#训练标准化对象
normalizer.fit(x)
#把数据转化成标准化数据
x = normalizer.transform(x)
执行代码,得到归一化的数据:
并非所有的特征工程的手段都可以对模型产生正向的提升。