数据处理 - 标准化归一化处理
1.数据标准化-StandardScaler
引用维基百科一句话,在统计学领域,标准化指的是向标准得分的转换
在数据量大小差别很大,而且具有不同的量纲时,如果直接用原始数值进行分析,就会感觉数值较高的相对较低的作用更突出。所以,为了保证结果的可靠性,需要对原始数据进行标准化处理。
- 数据标准化
通过去除均值和缩放到单位方差来标准化特征。(均值为0,方差为1),也叫Z-score 均值-方差标准化
样本标准化z
计算如下:
\[z = (x - u) /s
\]
其中x
是实际的样本,u
的样本的均值,s
是样本的标准差
import pandas as pd
from sklearn.preprocessing import StandardScaler
data = pd.DataFrame([['北京', '-5', '25', '18'],
['上海', '-2', '27', '20'],
['广州', '3', '33', '25'],
['深圳', '5', '35', '28']],
columns=['地区', '1月最低气温', '8月最高气温', '9月最高气温'])
s_scaler = StandardScaler()
df = data.iloc[:,1:]
print(df)
print("###### 数据标准化(StandardScaler) ######")
print(s_scaler.fit_transform(df))
"""
1月最低气温 8月最高气温 9月最高气温
0 -5 25 18
1 -2 27 20
2 3 33 25
3 5 35 28
###### 数据标准化(StandardScaler) ######
[[-1.32550825 -1.21267813 -1.19926937]
[-0.56807496 -0.72760688 -0.69431384]
[ 0.69431384 0.72760688 0.56807496]
[ 1.19926937 1.21267813 1.32550825]]
"""
2.数据归一化 - MinMaxScaler
通过将每个特征缩放到给定范围来转换特征。(缩放0~1之间),也叫最大-最小标准化
归一化的x'
的计算如下:
\[x' = \frac {x-min(x)}{max(x)-min(x)}
\]
其中x
是实际的样本
例子
##### 数据归一化 #####
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
data = pd.DataFrame([['北京', '-5', '25', '18'],
['上海', '-2', '27', '20'],
['广州', '3', '33', '25'],
['深圳', '5', '35', '28']],
columns=['地区', '1月最低气温', '8月最高气温', '9月最高气温'])
min_max_scaler = MinMaxScaler()
df = data.iloc[:,1:]
print(df)
print("###### 数据归一化(MinMaxScaler) ######")
print(min_max_scaler.fit_transform(df))
"""
1月最低气温 8月最高气温 9月最高气温
0 -5 25 18
1 -2 27 20
2 3 33 25
3 5 35 28
###### 数据归一化(MinMaxScaler) ######
[[0. 0. 0. ]
[0.3 0.2 0.2]
[0.8 0.8 0.7]
[1. 1. 1. ]]
"""
3.Normalizer
将样本单独标准化为单位范数。简单的说,Normalizer重新调整每个样本
怎么理解范数❓
例如,给定一行[4,1,2,2],范数l2是:
\[\sqrt{4^2+1^2+2^2+2^2}=\sqrt{25}=5
\]
规范化的行是:
[4/5, 1/5, 2/5, 2/5]= [0.8, 0.2, 0.4, 0.4]
例子:
##### Normalizer #####
import pandas as pd
from sklearn.preprocessing import Normalizer
data = pd.DataFrame([[4, 1, 2, 2],
[1, 3, 9, 3]])
normalizer = Normalizer()
print(data)
print("###### Normalizer ######")
print(normalizer.fit_transform(data))
"""
0 1 2 3
0 4 1 2 2
1 1 3 9 3
###### Normalizer ######
[[0.8 0.2 0.4 0.4]
[0.1 0.3 0.9 0.3]]
"""
4.标签编码器 - LabelEncoder
使用0到n_classes-1之间的值对目标标签进行编码
例子:对性别进行转换,w=男,m=女,nan=未知
##### LabelEncoder可用于标准化标签 #####
from sklearn import preprocessing
from numpy import nan
data = pd.DataFrame(["W", "W", "M", nan], columns=['性别'])
le = preprocessing.LabelEncoder()
print(data)
print("###### LabelEncoder ######")
print(le.fit_transform(data['性别']))
"""
性别
0 W
1 W
2 M
3 NaN
###### LabelEncoder ######
[1 1 0 2]
"""
5.标准化、归一化、Normalizer总结
- 数据标准化 StandardScaler (基于特征矩阵的列,将属性值转换至服从正态分布) 标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下,常用与基于正态分布的算法,比如回归。【业界的首选】
- 数据归一化 MinMaxScaler (区间缩放,基于最大最小值,将数据转换到0,1区间上的)提升模型收敛速度,提升模型精度 常见用于神经网络
- Normalizer (基于矩阵的行,将样本向量转换为单位向量) 其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,常见用于文本分类和聚类、logistic回归中也会使用,有效防止过拟合
总结
再补充一个内容, Normalizer 按行执行,StandardScaler 按列执行。
相关参考: