机器学习数据预处理——标准化/归一化方法总结

通常,在Data Science中,预处理数据有一个很关键的步骤就是数据的标准化。这里主要引用sklearn文档中的一些东西来说明,主要把各个标准化方法的应用场景以及优缺点总结概括,以来充当笔记。

首先,我要引用我自己的文章Feature Preprocessing on Kaggle里面关于Scaling的描述

Tree-based models doesn’t depend on scaling

Non-tree-based models hugely depend on scaling

一、标准化/归一化的好处

1.1 提升模型精度

在机器学习算法的目标函数(例如SVM的RBF内核或线性模型的l1和l2正则化),许多学习算法中目标函数的基础都是假设所有的特征都是零均值并且具有同一阶数上的方差。如果某个特征的方差比其他特征大几个数量级,那么它就会在学习算法中占据主导位置,导致学习器并不能像我们说期望的那样,从其他特征中学习。

举一个简单的例子,在KNN中,我们需要计算待分类点与所有实例点的距离。假设每个实例点(instance)由n个features构成。如果我们选用的距离度量为欧式距离,如果数据预先没有经过归一化,那么那些绝对值大的features在欧式距离计算的时候起了决定性作用,soga。

从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

1.2 提升收敛速度

对于线性model来说,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

比较这两个图,前者是没有经过归一化的,在梯度下降的过程中,走的路径更加的曲折,而第二个图明显路径更加平缓,收敛速度更快。

  • 对于神经网络模型,避免饱和是一个需要考虑的因素,通常参数的选择决定于input数据的大小范围。

二、标准化/归一化方法

sklearn的preprocessing提供了可以满足需求的归一化方法:

2.1 StandardScaler

标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化函数为:

x =(x - ??)/??

适用于:如果数据的分布本身就服从正态分布,就可以用这个方法。

通常这种方法基本可用于有outlier的情况,但是,在计算方差和均值的时候outliers仍然会影响计算。所以,在出现outliers的情况下可能会出现转换后的数的不同feature分布完全不同的情况。

如下图,经过StandardScaler之后,横坐标与纵坐标的分布出现了很大的差异,这可能是outliers造成的。

2.2 MinMaxScaler

将特征缩放至特定区间,将特征缩放到给定的最小值和最大值之间,或者也可以将每个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间。转换函数为:

x = (x-min)/(max-min)

这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

敲黑板,这种方法对于outlier非常敏感,因为outlier影响了max或min值,所以这种方法只适用于数据在一个范围内分布的情况

2.3 RobustScaler

如果你的数据包含许多异常值,使用均值和方差缩放可能并不是一个很好的选择。这种情况下,你可以使用 robust_scale 以及 RobustScaler 作为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。

This Scaler removes the median(中位数) and scales the data according to the quantile range(四分位距离,也就是说排除了outliers)

2.4 [0, 1] 还是 [-1, 1] ?

假设我们有一个只有一个hidden layer的多层感知机(MLP)的分类问题。每个hidden unit表示一个超平面,每个超平面是一个分类边界。参数w(weight)决定超平面的方向,参数b(bias)决定超平面离原点的距离。如果b是一些小的随机参数(事实上,b确实被初始化为很小的随机参数),那么所有的超平面都几乎穿过原点。所以,如果data没有中心化在原点周围,那么这个超平面可能没有穿过这些data,也就是说,这些data都在超平面的一侧。这样的话,局部极小点(local minima)很有可能出现。 所以,在这种情况下,标准化到[-1, 1]比[0, 1]更好。

1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好。

2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用MinMaxScaler。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

原因是使用MinMaxScaler,其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。

而在StandardScaler中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

  • Reference:
  1. 预处理数据-sklearn
  2. 数据标准化/归一化normalization
  3. 机器学习笔记:为什么要对数据进行归一化处理?
  4. Compare the effect of different scalers on data with outliers
  5. 数据归一化和两种常用的归一化方法
  6. Should I normalize/standardize/rescale the data

原文地址:https://www.cnblogs.com/bjwu/p/8977141.html

时间: 2024-11-07 22:56:13

机器学习数据预处理——标准化/归一化方法总结的相关文章

特征提取(机器学习数据预处理)

特征提取(机器学习数据预处理) 特征提取与特征选择都是数据降维的技术,不过二者有着本质上的区别:特征选择能够保持数据的原始特征,最终得到的降维数据其实是原数据集的一个子集:而特征提取会通过数据转换或数据映射得到一个新的特征空间,尽管新的特征空间是在原特征基础上得来的,但是凭借人眼观察可能看不出新数据集与原始数据集之间的关联. 这里介绍2种常见的特征提取技术: 1)主成分分析(PCA) 2)线性判别分析(LDA) 1.主成分分析(PCA) 一种无监督的数据压缩,数据提取技术,通常用于提高计算效率,

python大战机器学习——数据预处理

数据预处理的常用流程: 1)去除唯一属性 2)处理缺失值 3)属性编码 4)数据标准化.正则化 5)特征选择 6)主成分分析 (1)去除唯一属性 在获取的数据集中,经常会遇到唯一属性.这些属性通常是添加的一些di属性,如存放在数据库中自增的主键.这些属性并不能刻画样本自身的分布规律,所以只需要简单地删除这些属性即可. (2)处理缺失值的三种方法 1)直接使用含有缺失值的特征  2)删除含有缺失值的特征  3)缺失值补全 1)直接使用:对于某些算法可以直接使用含有缺失值的情况.如决策树. 2)特征

数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑

背景:数据挖掘/机器学习中的术语较多,而且我的知识有限.之前一直疑惑正则这个概念.所以写了篇博文梳理下 摘要: 1.正则化(Regularization) 1.1 正则化的目的 1.2 正则化的L1范数(lasso),L2范数(ridge),ElasticNet 2.归一化 (Normalization)   2.1归一化的目的 2.1归一化计算方法 2.2.spark ml中的归一化 2.3 python中skelearn中的归一化 知识总结: 1.正则化(Regularization) 1.

数据预处理:独热编码(One-Hot Encoding)

http://blog.csdn.net/pipisorry/article/details/61193868 问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from Europe", "from US", "from Asia"] ["uses Firefox", "uses Ch

关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化

一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1. 实现时,有两种不同的方式: 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> from skle

[Scikit-Learn] - 数据预处理 - 归一化/标准化/正则化

reference: http://www.cnblogs.com/chaosimple/p/4153167.html 一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1. 实现时,有两种不同的方式: 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化. 1

使用sklearn进行数据预处理 —— 归一化/标准化/正则化

一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1. 实现时,有两种不同的方式: 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> from skle

转:数据标准化/归一化normalization

转自:数据标准化/归一化normalization 这里主要讲连续型特征归一化的常用方法.离散参考[数据预处理:独热编码(One-Hot Encoding)]. 基础知识参考: [均值.方差与协方差矩阵] [矩阵论:向量范数和矩阵范数] 数据的标准化(normalization)和归一化 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较

机器学习之数据预处理

归一化处理 from sklearn.preprocessing import StandardScaler X_scaler = StandardScaler() y_scaler = StandardScaler() X_train = X_scaler.fit_transform(X_train) y_train = y_scaler.fit_transform(y_train) X_test = X_scaler.transform(X_test) #同样的模型来训练转化测试数据 y_t