数据处理 - 标准化归一化处理

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]]
"""

API - StandardScaler

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]
"""

API - LabelEncoder

5.标准化、归一化、Normalizer总结

  1. 数据标准化 StandardScaler (基于特征矩阵的列,将属性值转换至服从正态分布) 标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下,常用与基于正态分布的算法,比如回归【业界的首选】
  2. 数据归一化 MinMaxScaler (区间缩放,基于最大最小值,将数据转换到0,1区间上的)提升模型收敛速度,提升模型精度 常见用于神经网络
  3. Normalizer (基于矩阵的行,将样本向量转换为单位向量) 其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,常见用于文本分类和聚类、logistic回归中也会使用,有效防止过拟合

总结

再补充一个内容, Normalizer 按行执行,StandardScaler 按列执行。

相关参考:

https://stackoverflow.com/questions/39120942/difference-between-standardscaler-and-normalizer-in-sklearn-preprocessing

预处理数据

posted @ 2021-10-19 22:06  Rosaany  阅读(817)  评论(0编辑  收藏  举报