标准化和归一化的区别

1、是什么?

1. 归一化

  是为了将数据映射到0~1之间,去掉量纲的过程,让计算更加合理,不会由于量纲问题致使1米与100mm产生不一样。python

  归一化是线性模型作数据预处理的关键步骤,好比LR,非线性的就不用归一化了。面试

     归一化就是让不一样维度之间的特征在数值上有必定比较性,能够大大提升分类器的准确性。算法

缺点:这种方法有个缺陷就是当有新数据加入时,可能致使max和min的变化,须要从新定义机器学习

另外,最大值与最小值很是容易受异常点影响,因此这种方法鲁棒性较差,只适合传统精确小数据场景函数

2. z-标准化

  消除分布产生的度量误差,例如:班级数学考试,数学成绩在90-100之间,语文成绩在60-100之间,那么,小明数学90,语文100,小花数学95,语文95,如何评价两个综合成绩好坏的数学处理方式。学习

 

2、怎么选?

1. 标准化

  • 标准化更好保持了样本间距。当样本中有异常点时,归一化有可能将正常的样本“挤”到一块儿去。好比三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一块儿去。若是不幸的是1和2的分类标签仍是相反的,那么,当咱们用梯度降低来作分类模型训练时,模型会须要更长的时间收敛,由于将样本分开须要更大的努力!而标准化在这方面就作得很好,至少它不会将样本“挤到一块儿”。
  • 标准化更符合统计学假设:对一个数值特征来讲,很大可能它是服从正态分布的。标准化实际上是基于这个隐含假设,只不过是略施小技,将这个正态分布调整为均值为0,方差为1的标准正态分布而已。

(1)逻辑回归必需要进行标准化吗?

答案:这取决于咱们的逻辑回归是否是用正则。spa

  若是你不用正则,那么,标准化并非必须的,若是你用正则,那么标准化是必须的。(暗坑3)
  为何呢?
  由于不用正则时,咱们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,咱们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。举例来讲,咱们用体重预测身高,体重用kg衡量时,训练出的模型是: 身高 = 体重*x ,x就是咱们训练出来的参数。
当咱们的体重用吨来衡量时,x的值就会扩大为原来的1000倍。
  在上面两种状况下,都用L1正则的话,显然对模型的训练影响是不一样的。.net

  假如不一样的特征的数值范围不同,有的是0到0.1,有的是100到10000,那么,每一个特征对应的参数大小级别也会不同,在L1正则时,咱们是简单将参数的绝对值相加,由于它们的大小级别不同,就会致使L1最后只会对那些级别比较大的参数有做用,那些小的参数都被忽略了。3d

  若是你回答到这里,面试官应该基本满意了,可是他可能会进一步考察你,若是不用正则,那么标准化对逻辑回归有什么好处吗?orm

  答案是有好处,进行标准化后,咱们得出的参数值的大小能够反应出不一样特征对样本label的贡献度,方便咱们进行特征筛选。若是不作标准化,是不能这样来筛选特征的。

  答到这里,有些厉害的面试官可能会继续问,作标准化有什么注意事项吗?

  最大的注意事项就是先拆分出test集,不要在整个数据集上作标准化,由于那样会将test集的信息引入到训练集中,这是一个很是容易犯的错误!

举例:简单的预测房价的线性回归模型:

  有一组关于房价和房子变量的数据集,经过房子的面积,房间数量,房子的层数来预测房价。

  占地面积1800尺,房间数量3间,房子层数2层-> 房价?;为了方便对比,咱们分别看一下标准化前和标准化后的模型输出分布是怎么样的。

  能够看出,标准化先后变量的系数不一样,偏差不一样,可是R平方,和变量的t值是相同的

  如今咱们来预测一个1590尺,3个卧室,3层的房屋

  咱们发现预测出来的房价是同样的。
  这时你必定会想,既然结果都同样,作不作标准化,都同样嘛。说到这里,咱们再看一下,建模时寻找最优解的时间吧。

  为何标准化后的建模时间会短呢?这时候就要提及寻找系数最优解-梯度降低法。

  标准化前,因为变量的单位相差很大,致使了椭圆型的梯度轮廓。标准化后,把变量变成统一单位,产生了圆形轮廓。因为梯度降低是按切线方向降低,因此致使了系统在椭圆轮廓不停迂回地寻找最优解,而圆形轮廓就能轻松找到了。

  还有一种比较极端的状况,有时没作标准化,模型始终找不到最优解,一直不收敛。

(2)PCA须要标准化吗?

  咱们再来看一下,若是将预测房价的变量,用PCA方法来降维,会不会对结果产生影响。

  咱们看出在标准化前,用一个成分就能解释99%的变量变化,而标准化后一个成分解释了75%的变化。 主要缘由就是在没有标准化的状况下,咱们给了居住面积过大权重,形成了这个结果。

(3)Kmeans,KNN须要标准化吗?

  Kmeans,KNN一些涉及到距离有关的算法,或者聚类的话,都是须要先作变量标准化的。

  举例:咱们将3个城市分红两类,变量有面积和教育程度占比;三个城市分别是这样的:

  城市A,面积挺大,可是成天发生偷盗抢劫,教育程度低;
  城市B,面积也挺大,治安不错,教育程度高;
  城市C,面积中等,治安也挺好,教育程度也挺高;

  咱们若是不作标准化,直接作聚类模型的话,A城市和B城市分在一起了,你想一想,一个治安挺好的城市和一个总体偷盗抢劫城市分在一块儿,实在是有点违反常理。

总结:

  在分类、聚类算法中,须要使用距离来度量类似性的时候、或者使用PCA技术进行降维的时候,Z-score standardization表现更好

基于树的模型不须要标准化;

用到正则的线性模型必定要标准化,没用到正则的线性模型不必定要标准化, 但标准化能够加快收敛;

基于距离或聚类须要先作标准化,如KNN、kmeans

PCA最好先作标准化

 

2. 归一化

  模型算法里面有没关于对距离的衡量,没有关于对变量间标准差的衡量。好比decision tree 决策树,他采用算法里面没有涉及到任何和距离等有关的,因此在作决策树模型时,一般是不须要将变量作标准化的。

  在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可使用归一化方法。好比图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。有时候,咱们必需要特征在0到1之间,此时就只能用归一化。有种svm可用来作单分类,里面就须要用到归一化。

 

3、怎么用?

#导入数据到data变量中
import pandas
data = pandas.read_csv('路径.csv')

#(一)Min-Max 标准化

from sklearn.preprocessing import MinMaxScaler
#初始化一个scaler对象
scaler = MinMaxScaler()
#调用scaler的fit_transform方法,把咱们要处理的列做为参数传进去

data['标准化后的A列数据'] = scaler.fit_transform(data['A列数据'])
data['标准化后的B列数据'] = scaler.fit_transform(data['B列数据'])

#(二)Z-Score标准化 (可在scale中直接实现)

from sklearn.preprocessing import scale
data['标准化后的A列数据'] = scale(data['A列数据'])
data['标准化后的B列数据'] = scale(data['B列数据'])

# (三) Normalizer归一化

from sklearn.preprocessing import Normalizer
scaler = Normalizer()
#归一化能够同时处理多个列,因此[0]第一个进行赋值
data['归一化后的A列数据'] = scaler.fit_transform(data['A列数据'])[0]
data['归一化后的B列数据'] = scaler.fit_transform(data['B列数据'])[0]

  

 

参考文献:

【1】关于数据建模变量标准化

【2】机器学习面试之归一化与标准化

【3】[机器学习] 数据特征 标准化和归一化

相关文章
相关标签/搜索