由于工作问题比较忙,有两周没有总结一下工作学习中遇到的问题。

这篇主要是关于机器学习中的数据预处理的scaler变化。

工作中遇到的问题是:流量预测问题,拿到的数据差距非常大,凌晨的通话流量很少几乎为0;但是在早上8点以后数据就会激增最高常常是500以上的情况。

通常,在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

机器学习中数据预处理——标准化/归一化方法(scaler)相关推荐

  1. 机器学习中数据预处理方法

    在知乎上也看到了这个,不知道哪个是原创,这里粘上链接 https://zhuanlan.zhihu.com/p/51131210 前言 数据预处理的重要性? 熟悉数据挖掘和机器学习的小伙伴们都知道,数 ...

  2. dataframe数据标准化处理_数据预处理——标准化/归一化(实例)

    这次我们来说说关于数据预处理中的数据标准化及归一化的问题.主要以理论+实例的方式为大家展示. 本次实验也将会展示部分数据以及代码,有兴趣的小伙伴可以自己动手试试~ 在本次实例过程中,我们使用的数据是: ...

  3. pandas数据预处理(标准化归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样)

    1. 数值型数据的处理 1.1 标准化&归一化 数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. ...

  4. 机器学习中数据预处理的方式

    数据标量化 如果需要学习的不同的数据标签之间的量纲差距太大,那么需要进行数据标量化操作,有3个主要的优势: 可以使梯度下降更快 躲避"NaN陷阱",数据中有些数值可能超过了计算机的 ...

  5. 数据归一化处理方法_数据预处理:归一化和标准化

    1. 概述 数据的归一化和标准化是特征缩放(feature scaling)的方法,是数据预处理的关键步骤.不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间 ...

  6. pandas用众数填充缺失值_【机器学习】scikit-learn中的数据预处理小结(归一化、缺失值填充、离散特征编码、连续值分箱)...

    一.概述 1. 数据预处理 数据预处理是从数据中检测,修改或删除不准确或不适用于模型的记录的过程 可能面对的问题有:数据类型不同,比如有的是文字,有的是数字,有的含时间序列,有的连续,有的间断. 也可 ...

  7. 机器学习之数据预处理——归一化,标准化

    机器学习之数据预处理--归一化,标准化 基础知识 1.什么是特征预处理 2.预处理方法 : 3.预处理API: 数据的标准化(normalization)和归一化 数据的标准化 数据归一化 1 把数变 ...

  8. 数据预处理之归一化/标准化/正则化/零均值化

    数据预处理之归一化/标准化/正则化/零均值化 一.标准化(Standardization) 二.归一化(Normalization) 三,中心化/零均值化 (Zero-centered) 四.正则化 ...

  9. 神经网络中的网络优化和正则化(二)之参数初始化/数据预处理/逐层归一化

    转载请注明出处:https://thinkgamer.blog.csdn.net/article/details/101026786 博主微博:http://weibo.com/234654758 G ...

最新文章

  1. jasonrpcbridge
  2. 【康奈尔大学】机器学习领域读博这段旅程的一些感悟
  3. Windows Server中的故障转移群集的实现机制
  4. 全局变量用常量初始化----C和C++的不同
  5. 警惕由于使用YYYY-MM-dd引发的一场生产问题
  6. [css] 举例说明伪类:nth-child、:first-child与:first-of-type这三者有什么不同?
  7. 搞了多年管理软件,总算说清楚了什么是好软件
  8. Foundation框架集合 ---- NSArray和NSMutableArray
  9. 【webpack】理解配置文件
  10. Kotlin — 运行代码片段(以轻量级方式编写和无需创建整个应用程序的方法)
  11. Python爱心表白代码
  12. python二元函数拟合_Python拟合二元一次函数
  13. 有效值/峰-峰值/幅值/瞬时值
  14. 互联网入口,一个正在消失的“黑洞”
  15. Centos7防火墙iptables安装及设置图文并茂【实现防火墙管理功能】
  16. c语言用字符方式拚一个时钟,2012年3月份全国计算机等级考试二级c语言题库(机试) (1)...
  17. 质量管理中的“二八法则”
  18. 实用 Windows 软件系列分享(六)
  19. 时间范围内按某个刻度取各个刻度间的数据
  20. vscode找不到头文件的解决办法

热门文章

  1. 我们应该怎样做需求分析?(一)需求调研
  2. 虚拟机.linux.pgf90
  3. java中的线程池有哪些,分别有什么作用?
  4. 朴素贝叶斯算法系列:多项式贝叶斯、高斯贝叶斯、伯努利贝叶斯
  5. 上汽董事长称不接受与华为合作自动驾驶;曝OPPO给离职员工补发年终奖,此前遭克扣;Google Play 将启用AAB格式应用...
  6. 解决方案:h5网页外部浏览器唤起微信分享,唤起微信面板,分享朋友圈方案,兼容大部分浏览器
  7. SEO集思广益,如何做到效果最佳?
  8. 三人行-有分享才会有行动
  9. git pull 和 git fecth 的区别
  10. 后端开发框架的具体内容是什么?