机器学习中的标准化方法(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计算属性,两种方式的最终结果确实是完全相同 计算属性是基于它们的响应式依赖进行缓存 ...
随机推荐
- Pyqt5_QtextEdit
QtextEdit QTextEdit类是一个多行文本框控件,可以显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平个垂直滚动条,Qtextedit不仅可以用来显示文本还可以用来显示HTML ...
- 【转】团队项目的Git分支管理规范
原文地址: http://blog.jboost.cn/git-branch.html 分支管理 创建项目时(一般是服务型项目,工具型或辅助型项目可以简单一些),会针对不同环境创建三个常设分支: de ...
- web自动化之浏览器的窗口切换
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...
- 【JAVA习题六】输入两个正整数m和n,求其最大公约数
import java.util.Scanner; public class Oujilide欧几里得 { public static void main(String[] args) { // TO ...
- Java的四种权限修饰符
private:仅对本类可见 缺省(不需修饰符):对本包可见 protected:对本包及所有子类可见 public:对所有类可见 修饰符: * 权限修饰符:private,默认的,protected ...
- 02 . Python之数据类型
Python入门之数据类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数 ...
- 【MobileNet-V1】-2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications-论文阅读
2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications Andrew H ...
- chrome和Firefox浏览器渲染页面的不同
一直很好奇chrome和firefox这两大浏览器的页面渲染有什么不同,今天自己写了些html代码来做了下检验. 先做html编码,代码如下: <!DOCTYPE html><htm ...
- vue-组件化-插槽(slot)
理解 Vue组件化中,当我们在设计一个组件的时候,可能会保留一部分,让使用者自定义的内容,比如: 导航栏组件中,右上角的分享按钮,左上角做菜单按钮 弹出框组件中,弹出框的提示内容等 ... 在这种场景 ...
- 聚类算法之k-均值聚类
k-均值聚类算法 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 适用数据类型:数值型数据 其工作流程:首先,随机确定k个初始点作为质心,然后将数据集中的每个点分配到一个簇中,具 ...