在进行特征选择之前,一般会先进行数据无量纲化处理,这样,表征不同属性(单位不同)的各特征之间才有可比性,如1cm 与 0.1kg 你怎么比?无量纲处理方法很多,使用不同的方法,对最终的机器学习模型会产生不同的影响。本文将对常用的无量纲化技术进行总结,试图指出他们的适用场景,并给出在Python中的相应调用方式。正文中每列代表一个 属性/特征,每行表示一个/条 样本。

1. min-max归一化

该方法是对原始数据进行线性变换,将其映射到[0,1]之间,该方法也被称为离差标准化(但是请注意,网上更多人喜欢把z-score称为标准化方法,把min-max称为归一化方法,然后在此基础上,强行给标准化(z-score)与归一化(min-max)划条界线,以显示二者之间的相异性。对!二者之间确实有很大的不同,这个我们后面会有介绍,但是这两个方法说到底还都是用来去除量纲的,都是无量纲化技术中的一员而已,所以,请不要纠结标准化与归一化这两个概念了)。

上式中,min是样本的最小值,max是样本的最大值。由于最大值与最小值可能是动态变化的,同时也非常容易受噪声(异常点、离群点)影响,因此一般适合小数据的场景。此外,该方法还有两点好处:

1) 如果某属性/特征的方差很小,如身高:np.array([[1.70],[1.71],[1.72],[1.70],[1.73]]),实际5条数据在身高这个特征上是有差异的,但是却很微弱,这样不利于模型的学习,进行min-max归一化后为:array([[ 0. ], [ 0.33333333], [ 0.66666667], [ 0. ], [ 1. ]]),相当于放大了差异;

  2) 维持稀疏矩阵中为0的条目。

使用方法如下:

from sklearn.preprocessing import MinMaxScaler
x = np.array([[1,-1,2],[2,0,0],[0,1,-1]])
x1 = MinMaxScaler().fit_transform(x)

不难发现,x1每列的值都在[0,1]之间,也就是说,该模块是按列计算的。并且MinMaxScaler在构造类对象的时候也可以直接指定最大最小值的范围:scaler = MinMaxScaler(feature_range=(min, max)).

2. z-score标准化

z-score标准化(zero-mena normalization,0-均值标准化)方法的公式如下所示:

上式中,x是原始数据,u是样本均值,σ是样本标准差。回顾下正态分布的基本性质,若x~N(u,σ^2),则有:

其中,N(0,1)表示标准正态分布。

于是,可以看出,z-score标准化方法试图将原始数据集标准化成均值为0,方差为1且接近于标准正态分布的数据集。然而,一旦原始数据的分布 不 接近于一般正态分布,则标准化的效果会不好。该方法比较适合数据量大的场景(即样本足够多,现在都流行大数据,因此可以比较放心地用)。此外,相对于min-max归一化方法,该方法不仅能够去除量纲,还能够把所有维度的变量一视同仁(因为每个维度都服从均值为0、方差1的正态分布),在最后计算距离时各个维度数据发挥了相同的作用,避免了不同量纲的选取对距离计算产生的巨大影响。所以,涉及到计算点与点之间的距离,如利用距离度量来计算相似度、PCA、LDA,聚类分析等,并且数据量大(近似正态分布),可考虑该方法。相反地,如果想保留原始数据中由标准差所反映的潜在权重关系应该选择min-max归一化,基于数学角度的解释可参阅这两篇博文[1,2],链接在最下方reference内。

from sklearn.preprocessing import StandardScaler
x = np.array([[1,2,3],[4,5,6],[1,2,1]])
x1 = StandardScaler().fit_transform(x)

可以发现,x1的每一列加起来都是0,方差是1左右。注意该方法同样按列(即每个属性/特征)进行计算。并且StandardScaler类还有一个好处,就是可以直接调用其对象的.mean_与.std_方法查看原始数据的均值与标准差。

X = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]])
scaler = StandardScaler().fit(X)
scaler.mean_
array([ 1. ..., 0. ..., 0.33...])

3.  Normalization

在一些地方,有人把这种方法翻译为正则化,但是机器学习中的正则化更多是与模型相关(比如逻辑回归在损失函数后增加L2正则项),所以这种翻译我不喜欢;也有人称之为归一化,但是吧,有时这种方法并没体现“归一”特性,如处理后的数据该是负号的还是负号;直译表示标准化吧,我怕你们又把这种方法与z-score标准化联系起来,因此,就不翻译了吧。

其实这个方法是根据范数来进行 Normalization的,何为范数?听着感觉高大上,其实非常常见。Lp-范数的计算公式如下所示:

可见,L2范数即为欧式距离,则规则为L2的Normalization公式如下所示,易知,其将每行(条)数据转为相应的“单位向量”。

Normalization的过程是将每个样本缩放到单位范数(结合单位向量进行理解,p=2时为单位向量,其他为单位范数),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用[3]。

from sklearn import preprocessing
normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)

reference :

[1]. 《再谈机器学习中的归一化方法(Normalization Method)》

[2].  《归一化与标准化》

[3]. 《关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化》

转载地址:https://blog.csdn.net/OnTheWayGoGoing/article/details/79871559

数据挖掘——无量纲化相关推荐

  1. 机器学习特征工程之特征缩放+无量纲化:数据标准化(StandardScaler)

    机器学习特征工程之特征缩放+无量纲化:数据标准化(StandardScaler) 在Andrew Ng的机器学习课程里面,讲到使用梯度下降的时候应当进行特征缩放(Feature Scaling).进行 ...

  2. 机器学习特征工程之特征缩放+无量纲化:最小最大缩放(MinMaxScaler)

    机器学习特征工程之特征缩放+无量纲化:最小最大缩放(MinMaxScaler) 在Andrew Ng的机器学习课程里面,讲到使用梯度下降的时候应当进行特征缩放(Feature Scaling).进行缩 ...

  3. 机器学习特征工程之特征缩放+无量纲化:最大绝对值缩放(MaxAbsScaler)

    机器学习特征工程之特征缩放+无量纲化:最大绝对值缩放(MaxAbsScaler) 在Andrew Ng的机器学习课程里面,讲到使用梯度下降的时候应当进行特征缩放(Feature Scaling).进行 ...

  4. 特征缩放+无量纲化:最小最大缩放 - Python代码实现

    特征缩放+无量纲化:最小最大缩放 - Python代码实现 在机器学习的特征工程中,对于数据进行特征缩放和无量纲化是非常重要的步骤.其中,最小最大缩放(MinMaxScaler)是一种经典的无量纲化方 ...

  5. 特征工程-幅度调整-无量纲化(二):归一化和标准化案例,看不懂你打我

    import numpy as np import matplotlib.pyplot as plt import seaborn as sns 归一化 一般泛指把数据压缩到0到1之间的浮点数. da ...

  6. 格子玻尔兹曼方法(LBM)计算中的无量纲化转化(将物理参数转化为格子参数)

    说明:方法来自外文资料,主要通过无量纲方法进行LBM仿真计算中由实际物理量到格子物理量的转化,保证其一致性 已知量 物理长度尺寸HHH : 格子长度尺寸 (自定义)H~\tilde{H}H~: 密度ρ ...

  7. matlab数据无量纲化_MATLAB数据预处理——归一化和标准化

    输入/输出数据的预处理 尺度变换 尺度变换也称归一化或标准化,是指通过变换处理将网络的输入/输出数据限制在[0,1]或[-1,1]区间内.进行尺度变换的原因有: (1)网络的各个输入数据常常具有不同的 ...

  8. tsne pca 自编码器 绘图(CC2)——一定记得做无量纲化处理使用standardscaler,数据聚类更明显...

    tsne 数据不做预处理: # coding: utf-8 import collections import numpy as np import os import pickle from skl ...

  9. 机器学习系列(3)_特征工程01数据预处理

    参考链接: 1.scikit-learn官网 2.sklearn提供的自带的数据集 3.Kaggle官网 4.数据挖掘--无量纲化 文章目录 一.数据中台 二.sklearn中的数据预处理与特征工程 ...

  10. sklearn输出模型参数_如何使用sklearn优雅地进行数据挖掘?

    关注上方"数据挖掘工程师",选择星标, 关键时间,第一时间送达! 文章来自:天池大数据科研平台 一.使用sklearn数据挖掘 ‍‍ 1.数据挖掘的步骤 数据挖掘通常包括数据采集, ...

最新文章

  1. python连接mysql
  2. python中torch模块下载,Python qtorch包_程序模块 - PyPI - Python中文网
  3. ospf多区域配置为什么ping不通_「实战」动态路由多区域 OSPF 基本配置,一分钟了解下...
  4. MVC5 + EF6 入门完整教程
  5. 买空long position、卖空short position
  6. 工信部下架37款侵害用户权益APP 114票务网等在列
  7. 循环,数组,函数作业
  8. 动态规划 —— 最长递增子序列(LIS)
  9. 从零基础入门Tensorflow2.0 ----五、19. feature_column , keras_to_estimator
  10. Atitit 建立新组织集团模型的框架基本制度与一些原则
  11. Matlab2014的下载和安装激活过程
  12. 第一章 Crystal Reports简介
  13. 人脸识别:技术应用与商业实践
  14. 【 React 】设置代码快捷键
  15. java 测试代码效率_JAVA程序的性能测试方法
  16. 阿里云OSS图片文件和html文件无法直接打开,只能下载
  17. Mac Android Studio 打包APK 出现的问题
  18. 在虚拟机上使用Ghost备份/恢复操作系统
  19. 基于OpenCV的人脸识别考勤系统
  20. 快速以管理员运行cmd

热门文章

  1. Win7怎么打开磁盘管理?
  2. spj查询零件、工程、供应商表
  3. csp-j/s组第一轮测试140题版本模拟试题及解析
  4. Linux Swap 介绍
  5. 计算机中被选中会是什么颜色,举例详解使用photoshop cc 2017改变图片中被选中区域的颜色-网络教程与技术 -亦是美网络...
  6. 实验六、contentprovider实验+SQLite数据库的实现
  7. mui实现二维码扫描功能
  8. 实体类[notmapped]特殊 “The specified type member ‘‘ is not supported in LINQ to Entities. Only...
  9. 微信中无法下载APP的解决办法
  10. 关于使用实验室服务器的GPU以及跑上TensorFlow代码