1. 数据预处理简介
数据预处理的两个关键是数据规范化和特征缩放。方法包括应用仿射法在保持数据完整性的前提下,将当前不平衡的数据映射到更易于处理的形状中,使其表现出更好的随机属性并改进模型。标准化的一般目标是通过数据规范化和特征缩放使数据分布更接近正态分布。
2. 规范化和特征缩放
数据集预处理中一个非常重要的步骤是规范化和特征缩放。数据规范化将使得优化方法,特别是迭代方法,收敛得更好,并使数据更易于处理。
3. 规范化或标准化
规范化或标准化旨在赋予数据集具有平均值为0、标准差为1的标准正态分布属性,获得标准正态属性的方法是基于数据集样本计算z分数。
3.1 归一化
归一化就是对原始数据进行线性变换把数据映射到[0,1]之间。
具体计算公式:
X
′
=
(
X
−
X
m
i
n
)
/
(
X
m
a
x
−
X
m
i
n
)
X' = (X - Xmin)/(Xmax - Xmin)
X′=(X−Xmin)/(Xmax−Xmin)
其中min是样本中最小值,max是样本中最大值。
import numpy as np
from sklearn.preprocessing importMinMaxScaler
x = np.array([[1,-1,2],[2,0,0],[0,1,-1]])
x0 = MinMaxScaler().fit_transform(x)
print(x0)
运行结果如下:
[[0.5 0. 1. ]
[1. 0.5 0.33333333]
[0. 1. 0. ]]
归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。
3.2 标准化
标准化,就是在数据中心化之后,数据再除以数据集的标准差。
具体计算公式:
x
′
=
(
x
−
μ
)
/
σ
x' = (x -μ)/σ
x′=(x−μ)/σ
数据集中的各项数据减去数据集的均值再除以数据集的标准差。
import numpy as np
fromsklearn.preprocessing import StandardScaler
#z-score标准化
x =np.array([[1,2,3],[4,5,6],[1,2,1]])
x1 =StandardScaler().fit_transform(x)
print(x1)
运行结果如下:
[[-0.70710678 -0.70710678 -0.16222142]
[ 1.41421356 1.41421356 1.29777137]
[-0.70710678 -0.70710678 -1.13554995]]
可以发现,x1的每一列加起来都是0,方差是1左右。
(注:该方法是按列(即每个属性/特征)进行计算。)
3.3 归一化和标准化的意义
原始数据由于自变量的单位不同,会给数据分析带来一定的困难;又由于涉及的数据量较大,可能会因为舍入误差而使得计算结果并不理想。归一化和标准化系数有利于消除由于量纲不同、数量级不同带来的影响,避免不必要的误差。