使用sklearn库进行数据标准化处理

通常在进行机器学习的实践时,往往需要预先处理数据。数据处理时常常需要将数据转换为某种符合要求的形式或者转化为某个特定分布的形式。这种操作通常称为数据的无量纲化

无量纲化的处理可以在以梯度和矩阵为核心的算法应用中提高算法的求解速度,尤其是在使用了梯度下降的方法时。在距离类模型(例如k近邻算法)中可以帮助我们提高模型的精度。

数据的无量纲化可以是线性的也可以是非线性的。

线性的无量纲化包括中心化处理和缩放处理

中心化的本质是让所有记录减去一个固定值,即让样本数据平移到某个位置。缩放的本质是通过除以一个固定值,将数据固定在某个范围内,取对数也算一种缩放处理。

preprocessing.StandardScaler方法
当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从均值为0,方差为1的正态分布(即标准正态分布),这个过程叫做数据标准化 。

from sklearn.prepocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = StandardScaler().fit_transform(data)

其他数据标准化方法 

Zero-mean normalization
公式:
X = ( x − μ ) / σ 

这就是均值方差归一化,这样处理后的数据将符合标准正态分布,常用在一些通过距离得出相似度的聚类算法中,比如 K-means。

Min-max normalization
公式: X = ( x − X m i n ) / ( x − X m a x ) 

min-max 归一化的手段是一种线性的归一化方法,它的特点是不会对数据分布产生影响。不过如果你的数据的最大最小值不是稳定的话,你的结果可能因此变得不稳定。min-max 归一化在图像处理上非常常用,因为大部分的像素值范围是 [0, 255]。

Non-linear normaliztions
非线性的归一化函数包含 log,exp,arctan, sigmoid等等。用非线性归一化的函数取决于你的输入数据范围以及你期望的输出范围。比如 log() 函数在 [0, 1] 区间上有很强的区分度,arctan() 可以接收任意实数病转化到区间,sigmoid 接收任意实数并映射到 (0, 1)。

你可能感兴趣的:(sklearn,人工智能,python)