python归一化处理标准差_数据归一化和其在 sklearn 中的处理

打开微信扫一扫,关注微信公众号【码农故事多】

转载请注明出处: http://blog.csdn.net/gamer_gyt

博主微博: http://weibo.com/234654758

Github:

https://github.com/thinkgamer

一:数据归一化

数据归一化(标准化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

归一化方法有两种形式,一种是把数变为(0,1)之间的小数,一种是把有量纲表达式变为无量纲表达式。在机器学习中我们更关注的把数据变到0~1之间,接下来我们讨论的也是第一种形式。

1)min-max标准化

min-max标准化也叫做离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,其对应的数学公式如下:

对应的Python实现为

如果要将数据转换到[-1,1]之间,可以修改其数学公式为:

x_mean 表示平均值。

其中max为样本数据的最大值,min为样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

当然还有一些其他的办法也能实现数据的标准化。

2)z-score标准化

z-score标准化也叫标准差标准化,经过处理的数据符合标准正态分布,即均值为0,标准差为1。其转化函数为

其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。

其对应的python实现为:

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。

二:sklearn中的归一化

sklearn.preprocessing 提供了一些实用的函数 用来处理数据的维度,以供算法使用。

1)均值-标准差缩放

即我们上边对应的z-score标准化。

在sklearn的学习中,数据集的标准化是很多机器学习模型算法的常见要求。如果个别特征看起来不是很符合正态分布,那么他们可能为表现不好。

实际上,我们经常忽略分布的形状,只是通过减去整组数据的平均值,使之更靠近数据中心分布,然后通过将非连续数特征除以其标准偏差进行分类。

例如,用于学习算法(例如支持向量机的RBF内核或线性模型的l1和l2正则化器)的目标函数中使用的许多元素假设所有特征都以零为中心并且具有相同顺序的方差。如果特征的方差大于其他数量级,则可能主导目标函数,使估计器无法按预期正确地学习其他特征。

例子:

预处理模块还提供了一个实用程序级StandardScaler,它实现了Transformer API来计算训练集上的平均值和标准偏差,以便能够稍后在 测试 集上重新应用相同的变换。

2)min-max标准化

3)最大值标准化

4)规范化

规范化是文本分类和聚类中向量空间模型的基础

解释:norm 该参数是可选的,默认值是l2(向量各元素的平方和然后求平方根),用来规范化每个非零向量,如果axis参数设置为0,则表示的是规范化每个非零的特征维度。

机器学习中的范数规则:点击阅读

其他对应参数:点击查看

preprocessing模块提供了训练种子的功能,我们可通过以下方式得到一个新的种子,并对新数据进行规范化处理。

5)二值化

将数据转换到0-1 之间

6)编码的分类特征

通常情况下,特征不是作为连续值给定的。例如一个人可以有

[ "male" , "female" ], [ "from Europe" , "from US" , "from Asia" ],

[ "uses Firefox" , "uses Chrome" , "uses Safari" , "uses Internet Explorer" ]

这样的整数不应该直接应用到scikit的算法中,可以通过one-of-k或者独热编码(OneHotEncorder),该种处理方式会把每个分类特征的m中可能值转换成m个二进制值。

默认情况下,从数据集中自动推断出每个特征可以带多少个值。可以明确指定使用的参数n_values。在我们的数据集中有两种性别,三种可能的大陆和四种Web浏览器。然后,我们拟合估计量,并转换一个数据点。在结果中,前两个数字编码性别,下一组三个数字的大陆和最后四个Web浏览器。

7)填补缺失值

由于各种原因,真实数据中存在大量的空白值,这样的数据集,显然是不符合scikit的要求的,那么preprocessing模块提供这样一个功能,利用已知的数据来填补这些空白。

8)生成多项式特征

通常,通过考虑输入数据的非线性特征来增加模型的复杂度是很有用的。一个简单而常用的方法是多项式特征,它可以得到特征的高阶和相互作用项。

其遵循的原则是

对应的scikit-learn资料为:  http://scikit-learn.org/stable/modules/preprocessing.html

你可能感兴趣的:(python归一化处理标准差)