机器学习中的标准化方法(Normalization Methods)
希望这篇随笔能够从一个实用化的角度对ML中的标准化方法进行一个描述。即便是了解了标准化方法的意义,最终的最终还是要:拿来主义,能够在实践中使用。
动机:标准化的意义是什么?
我们为什么要标准化?想象我们有一个Data Matrix $\mathbf{X}\in \mathbb{R}^{n\times d}$ 我们首先必须要做的事情就是对这个Data Matix进行标准化,意义是:“取消由于量纲不同、自身变异或者数值相差较大所引起的误差。”这个解释还不是很明白,那么我们可以想象如果不进行标准化会发生什么。首先这个Data Matrix $\mathbf{X}$ 的每一行就代表了一个样本,我们需要利用这些样本feature之间的差异来完成我们的机器学习任务,such as regression and classification。接着我们就要使用不同的算法和模型来完成我们的任务,如果你直接对把这些raw data喂给模型。那么一个可能出现的情况就是模型参数的爆炸或者消失,同时训练速度可能会相当慢。这种情况的影响我的理解是很容易造成样本特征的模糊或者消失,虽然我们仍然能够对模型进行训练,但是效果可能非常不好。
好了,现在我们理解了标准化的意义,那么一个可能的思索是这样的:既然我们对原始数据进行了标准化处理,那么假如来了新数据我们应该咋办?要知道我们训练模型的目的是为了泛化,我们训练了一个模型之后该对付新来的数据呢,比如:使用标准化之后的模型训练了一个分类器,现在又来了一个样本,显然它没办法直接用我们训练的模型进行分类(因为我们的模型是用标准化之后的数据处理的鸭)。我的想法是,有两种方法:1. 在对数据矩阵标准化的时候记录下标准化参数,当有新的数据喂给模型的时,先要对这个数据进行一样的标准化处理。2. 我们用标准化后的数据训练了一个模型,模型参数为$\mathbf{W}_{N}$,能够用这个模型参数倒推“不进行标准化”的模型参数$\mathbf{W}$。这样我们获得了一个trained original model。这个模型能够直接处理不进行标准化的数据。很显然,第一个方法要比第二个方法简单通用的多。
最常用的标准化方法:Z-score and Max-Min Normalization
wikipedia上有一个表格,记录下了标准化的方法:
Name | Formula | Use |
---|---|---|
Standard score | Normalizing errors when population parameters are known. Works well for populations that are normally distributed[2] | |
Student's t-statistic | the departure of the estimated value of a parameter from its hypothesized value, normalized by its standard error. | |
Studentized residual | Normalizing residuals when parameters are estimated, particularly across different data points in regression analysis. | |
Standardized moment | Normalizing moments, using the standard deviation |
|
Coefficient of variation |
Normalizing dispersion, using the mean |
|
Min-Max Feature scaling | Feature scaling is used to bring all values into the range [0,1]. This is also called unity-based normalization. This can be generalized to restrict the range of values in the dataset between any arbitrary points |
其中最最常用的两个就是Min-Max Feature scaling和Standard score(也叫Z-score),原理和功能可以点上面的链接了解,下面介绍一下实现的步骤和一些坑。
Z-score
按如下方法标准化Data Matirx矩阵的每一列 $\mathbf{x}_i$ of $\mathbf{X}(1\leq i\leq d)$:(这里解释一下为什么是按列标准化:数据矩阵的每一列就代表了样本的每一维,我们想通过标准化来更好的处理该维度的特征,可以想想按行标准化是什么效果:make no sense)$$z_{ij}\leftarrow \frac{x_{ij}-\text{mean}(\mathbf{x}_i)}{\text{std}(\mathbf{x}_i)}$$
其中$x_{ij}$代表$\mathbf{x}_i$的第$j$个条目,同样的$z_{ij}$代表$\mathbf{z}_i\in \mathbb{R}^n$的第$j$个条目,$\mathbf{\overline{Z}}=(\mathbf{1},\mathbf{z}_1,\cdots,\mathbf{z}_d)\in \mathbb{R}^{n\times(d+1)}$, mean和std就是按列求每一列的均值啦,我们接下来处理$\mathbf{\overline{Z}}$这个矩阵就好了~~为什么这里会多一维呢?你可能已经知道这个多出来的一叫做dummy variable,我的理解是它一方面可以简化我们的模型表达,一方面提供了一个相当相当广义的正则化处理,降低了噪声的影响(当然这是我见过的大部分模型的需要,需要灵活处理,思想懂了就简单)。
Min-Max Feature scaling
这个标准化方法在我看来就非常的简单粗暴了,方式如下:$$z_{ij}\leftarrow \frac{x_{ij}-\text{min}(\mathbf{x}_i)}{\text{max}(\mathbf{x}_i)-\text{min}(\mathbf{x}_i)}$$
其中$x_{ij}$代表$\mathbf{x}_i$的第$j$个条目,同样的$z_{ij}$代表$\mathbf{z}_i\in \mathbb{R}^n$的第$j$个条目,$\mathbf{\overline{Z}}=(\mathbf{1},\mathbf{z}_1,\cdots,\mathbf{z}_d)\in \mathbb{R}^{n\times(d+1)}$, max和min是按列求每一列的最大和最小值。
实现中可能出现的问题:
假如我们的数据矩阵比较稀疏,可能会出现一整列都是0的情况。此时我们发现上面两个方法的分母都为0,出现除以0的情况,这时我们该怎么办?一个比较合理的想法是假如有一整列的0,我们可以标准化后保留。一列零还让它是一列零。那么我们可以对求得的分母加上一个epsilon,也就是一个小量,1e-8这样的量级。这样一列零的情况还是一列零,$\text{std}$ 或者 $\text{max}-\text{min}$不为0的情况也不会受影响。
机器学习中的标准化方法(Normalization Methods)的更多相关文章
- 机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)
http://antkillerfarm.github.io/ 向量的范数(续) 范数可用符号∥x∥λ表示. 经常使用的有: ∥x∥1=|x1|+⋯+|xn| ∥x∥2=x21+⋯+x2n−−−−−− ...
- 再谈机器学习中的归一化方法(Normalization Method)
机器学习.数据挖掘工作中,数据前期准备.数据预处理过程.特征提取等几个步骤几乎要花费数据工程师一半的工作时间.同时,数据预处理的效果也直接影响了后续模型能否有效的工作.然而,目前的大部分学术研究主要集 ...
- 机器学习中的矩阵方法03:QR 分解
1. QR 分解的形式 QR 分解是把矩阵分解成一个正交矩阵与一个上三角矩阵的积.QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础.用图可以将分解形象地表示成: 其 ...
- 机器学习中的矩阵方法(附录A): 病态矩阵与条件数
1. 病态系统 现在有线性系统: Ax = b, 解方程 很容易得到解为: x1 = -100, x2 = -200. 如果在样本采集时存在一个微小的误差,比如,将 A 矩阵的系数 400 改变成 4 ...
- php中的魔术方法(Magic methods)和魔术常亮
PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __cal ...
- 机器学习中的矩阵方法04:SVD 分解
前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出 ...
- 归一化方法 Normalization Method
1. 概要 数据预处理在众多深度学习算法中都起着重要作用,实际情况中,将数据做归一化和白化处理后,很多算法能够发挥最佳效果.然而除非对这些算法有丰富的使用经验,否则预处理的精确参数并非显而易见. 2. ...
- 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探
1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...
- 浅谈Vue中计算属性(computed)和方法(methods)的差别
浅谈Vue中计算属性(computed)和方法(methods)的差别 源码地址 methods方法和computed计算属性,两种方式的最终结果确实是完全相同 计算属性是基于它们的响应式依赖进行缓存 ...
随机推荐
- Java基础以及变量和运算符、包机制、javadoc生成
目录 注释.标识符.关键字 注释 标识符 关键字 标识符注意点 数据类型 强类型语言 弱类型语言 Java的数据类型 基本类型(primitive type) 数值类型 boolean类型 什么是字节 ...
- vs code插件自动压缩 min.css
我们在进行相应的项目书写的时候,有些需要把scss 和 css 进行 压缩成 min.css 便于更好的使用 在这里强调一下 scss 后来才慢慢接触到这个语言的 感觉的确实懂得明白了之后 好用而且 ...
- 一文带你学会基于SpringAop实现操作日志的记录
前言 大家好,这里是经典鸡翅,今天给大家带来一篇基于SpringAop实现的操作日志记录的解决的方案.大家可能会说,切,操作日志记录这么简单的东西,老生常谈了.不! 网上的操作日志一般就是记录操作人, ...
- 3.Linux如何管理分区
上一次谈完了硬盘与分区的基础知识,下面谈一下Linux如何管理分区. Linux管理硬件和windows完全不同.任何东西(包括硬件)在Linux看来都是文件设备,有字符和二进制形式的设备.如打印机. ...
- 用java方式实现快速排序
一.基本思想 快速排序采用分治的策略,具体如下:选择一个关键值作为基准值,找到一个元素小于比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的).一般选用序列第一个元素作为基准 ...
- python pexpect总结
基本使用流程 pexpect 的使用说来说去,就是围绕3个关键命令做操作: 首先用 spawn 来执行一个程序 然后用 expect 来等待指定的关键字,这个关键字是被执行的程序打印到标准输出上面的 ...
- 前端Web浏览器基于H5如何实时播放监控视频画面(前言)之流程介绍
先看上边这张图.由于离2020年12月各浏览器禁用Flash的日子越来越近,又正恰巧要做新录播项目,所以有了以下内容. 还记得去年也是这个时候,大约是四五六月份,甲方来了个需求想把车间的监控系统接入到 ...
- Cypress系列(5)- 自定义 Cypress
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 Cypress 不仅支持用户自定义 ...
- 《学习scrapy框架爬小说》的进一步完善
一.完善目标: 1.为方便使用,把小说拼音或英文名,小说输出中文名,第一章节url地址变量化,修改这些参数即可爬取不同的小说. 2.修改settings.py设置文件,配置为记录debug的log信息 ...
- Rocket - tilelink - RegionReplicator
https://mp.weixin.qq.com/s/XZVCdt50tM6lavchGm9GRg 简单介绍RegionReplicator的实现. 1. 基本介绍 根据mask ...