常见的数据预处理方法总结
0.概述
- 一般而言,样本的原始特征中的每一维特征由于来源以及度量单位不同,其特征取值的分布范围往往差异很大。当我们计算不同样本之间的欧氏距离时,取值范围大的特征会起到主导作用。这样,对于基于相似度比较的机器学习方法(比如最近邻分类器KNN),必须先对样本进行预处理,将各个维度的特征归一化到同一个取值区间,并且消除不同特征之间的相关性,才能获得比较理想的结果。虽然神经网络可以通过参数的调整来适应不同特征的取值范围,但是会导致训练效率比较低。
- 假设一个只有一层的网络 y=tanh(w1x1+w2x2+b)y=\tanh \left(w_{1} x_{1}+w_{2} x_{2}+b\right)y=tanh(w1x1+w2x2+b),其中x1∈[0,10]x_{1} \in[0,10]x1∈[0,10],x2∈[0,1]x_{2} \in[0,1]x2∈[0,1]。因为tanh函数的导数在区间 [−2, 2]上是敏感的,其余地方的导数接近于 0。因此,如果 w1x1+w2x2+bw_{1} x_{1}+w_{2} x_{2}+bw1x1+w2x2+b过大或过小,都会导致梯度过小,难以训练。为了提高训练效率,我们需要使w1x1+w2x2+bw_{1} x_{1}+w_{2} x_{2}+bw1x1+w2x2+b在 [−2, 2]区间,我们需要将w1设得小一点,比如在 [−0.1,0.1]之间。可以想象,如果数据维数很多时,我们很难这样精心去选择每一个参数。因此,如果每一个特征的取值范围都在相似的区间,比如 [0, 1]或者 [−1, 1],我们就不太需要区别对待每一个参数,减少人工干预。
- 当不同输入特征的取值范围差异比较大时,梯度下降法的效率也会受到影响。下图给出了数据归一化对梯度的影响。其中,图a为未归一化数据的等高线图。取值范围不同会造成在大多数位置上的梯度方向并不是最优的搜索方向。当使用梯度下降法寻求最优解时,会导致需要很多次迭代才能收敛。如果我们把数据归一化为取值范围相同,如图b所示,大部分位置的梯度方向近似于最优搜索方向。这样,在梯度下降求解时,每一步梯度的方向都基本指向最小值,训练效率会大大提高。
1.常用的归一化方法
- 1.1 缩放归一化:通过缩放将每一个特征的取值范围归一到 [0, 1]或 [−1, 1]之间。假设有 N 个样本{x(n)}n=1N\left\{\mathbf{x}^{(n)}\right\}_{n=1}^{N}{x(n)}n=1N,对每一维特征x,
x^(n)=x(n)−minn(x(n))maxn(x(n))−minn(x(n))\hat{x}^{(n)}=\frac{x^{(n)}-\min _{n}\left(x^{(n)}\right)}{\max _{n}\left(x^{(n)}\right)-\min _{n}\left(x^{(n)}\right)} x^(n)=maxn(x(n))−minn(x(n))x(n)−minn(x(n))
其中,min(x)和max(x)分别是特征x在所有样本上的最小值和最大值。 - 1.2 标准归一化:将每一个维特征都处理为符合标准正态分布(均值为 0,标准差为 1)。假设有 N 个样本{x(n)}n=1N\left\{\mathbf{x}^{(n)}\right\}_{n=1}^{N}{x(n)}n=1N,对每一维特征x,先计算它的均值和标准差:
μ=1N∑n=1Nx(n)σ2=1N∑n=1N(x(n)−μ)2\begin{aligned} \mu &=\frac{1}{N} \sum_{n=1}^{N} x^{(n)} \\ \sigma^{2} &=\frac{1}{N} \sum_{n=1}^{N}\left(x^{(n)}-\mu\right)^{2} \end{aligned} μσ2=N1n=1∑Nx(n)=N1n=1∑N(x(n)−μ)2
然后,将特征x(n)x^{(n)}x(n)减去均值,并除以标准差,得到新的特征x^(n)\hat{x}^{(n)}x^(n)。
x^(n)=x(n)−μσ\hat{x}^{(n)}=\frac{x^{(n)}-\mu}{\sigma} x^(n)=σx(n)−μ
这里σ\sigmaσ不能为0,如果标准差为0,则说明这一维度的特征没有任务的区分性,可以直接删除。在标准归一化之后,每一维特征都服从标准正态分布。 - 1.3 白化:是一种重要的预处理方法,用来降低输入数据特征之间的冗余性。输入数据经过白化处理后,特征之间相关性较低,并且所有特征具有相同的方差。白化的一个主要实现方式是使用主成分分析PCA方法去除掉各个成分之间的相关性。
2. 参考资料
- 邱锡鹏:《神经网络与深度学习》
常见的数据预处理方法总结相关推荐
- python必备基础代码-【Python基础系列】常见的数据预处理方法(附代码)
本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. 加载数据 1.1 数据读取 数据格式有很多,介绍常见 ...
- python数据预处理的代码_【Python基础系列】常见的数据预处理方法(附代码)
↑↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. ...
- Python数据分析:常见的数据预处理方法
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于数据杂论,作者:Wpc7113 Python 数据分析入门案例讲解 https:// ...
- python常用的数据预处理方法
2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://2hwp.com/2016/02/03/data-preprocessing/ 常见的数据预处理方法,以 ...
- sklearn中常用的数据预处理方法
常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal and Variance Scali ...
- python数据预处理的方法_python中常用的九种数据预处理方法
python中常用的九种预处理方法分享 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardizat ...
- 数据预处理包括哪些内容python_常见的数据预处理--python篇
做过数据分析的孩子一般都知道:数据预处理很重要,大概会占用整个分析过程50%到80%的时间,良好的数据预处理会让建模结果达到事半功倍的效果.本文简单介绍python中一些常见的数据预处理,包括数据加载 ...
- 学习weka(7):weka数据预处理方法
1.前言 weka 数据预处理阶段全部在 filter 上: 下面把一些常见的机器学习数据与处理方法处理说一下(下面所有实例都是在 Explorer 模块上进行的). 2.数据预处理方法 可以看到其 ...
- 【点云预处理】N种点云数据数据预处理方法 — 持续总结和更新(二)
1~10种点云预处理方法请参考:10种点云数据数据预处理方法 - 持续总结和更新(一)_Coding的叶子的博客-CSDN博客_点云预处理.深度学习中点云基本数据处理和增强方式,包括点云归一化.随机打 ...
最新文章
- js技巧--转义符\的妙用(转)
- 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标...
- 初步考虑matlab的仿真功能如何编程实现
- python抓包教程_Python爬虫入门技能:教你通过 Fiddler 进行手机抓包!
- 用Numpy手写各种距离度量
- VB实现6大排序算法---动态过程展示(建议收藏)
- spring.shardingsphere.rules.sharding.sharding-algorithms.database_inline.props‘ is not valid
- Linux 命令(81)—— chmod 命令
- 【Power Query】使用Excel抓取淘宝天猫所有类目分类和cateId对应关系
- 2022年下半年深圳地区数据分析师认证(CPDA),[进入查看]
- 批量word转pdf
- 网游加速器的工作原理
- LeapFTP 显示服务器端文件名乱码问题处理
- 阿里云CentOS7.2清除wnTKYg木马
- 马原(2023版)导论笔记
- 锐龙r76800h和酷睿i512500h核显对比 r7 6800h和i5 12500h哪个好
- 热感觉、热舒适、热满意度、热需求与热偏好
- 骗子公司 黑中介 黑到几时?
- 19106225贾奎滢
- CString字符串操作