数据变换-归一化与标准化

一般在机器学习的模型训练之前,有一个比较重要的步骤是数据变换

因为,一般情况下,原始数据的各个特征的值并不在一个统一的范围内,这样数据之间就没有可比性

数据变换的目的是将不同渠道,不同量级的数据转化到统一的范围之内,方便后续的分析处理

数据变换的方法有很多,比如数据平滑,数据聚集,数据概化,数据规范化属性构造等。

本篇文章主要介绍数据规范化,这是一种比较常用,也比较简单的方法。

数据规范化是使属性数据按比例缩放,这样就将原来的数值映射到一个新的特定区域中,包括归一化,标准化等。

1,数据归一化

归一化就是获取原始数据的最大值和最小值,然后把原始值线性变换到 [0,1] 范围之内,变换公式为:

其中:

  • x 是当前要变换的原始值。
  • min 是当前特征中的最小值。
  • max 是当前特征中的最大值。
  • x' 是变换完之后的新值。

注意:
minmax 是指当前特征中的最小最大值。
所以同一特征之内,最小最大值是一样的。
而不同特征之间,最小最大值是不一样的。

从公式中可以看出,归一化与最大最小值有关,这也是归一化的缺点,因为最大值与最小值非常容易受噪音数据的影响。

1.1,归一化处理

比如,我们有以下数据:

编号 特征1 特征2 特征3
第1条 5 465 135
第2条 23 378 69
第3条 69 796 83

通过数据可以观察出:

  • Max(特征1) = 69,Min(特征1) = 5
  • Max(特征2) = 796,Min(特征2) = 378
  • Max(特征3) = 135,Min(特征3) = 69

这里我们用第一条数据来举例,看看是如何变换的。

  • 对于第一个数字 5 做变换:(5 - 5) / (69 - 5) = 0
  • 对于第二个数字 465 做变换:(465 - 378) / (796 - 378) = 0.21
  • 对于第三个数字 135 做变换:(135 - 69) / (135 - 69) = 1

1.2,使用 MinMaxScaler 类

sklearn 库的 preprocessing 模块中的 MinMaxScaler 类就是用来做归一化处理的。

首先引入 MinMaxScaler 类:

>>> from sklearn.preprocessing import MinMaxScaler

准备要变换的 data 数据,并初始化 MinMaxScaler 对象:

>>> data = [[5, 465, 135], [23, 378, 69], [69, 796, 83]]
>>> scaler = MinMaxScaler() # 默认将数据拟合到 [0, 1] 范围内

拟合数据:

>>> scaler.fit(data)

输出每个特征的最大最小值:

>>> scaler.data_max_         # 特征最大值
array([ 69., 796., 135.])
>>> scaler.data_min_         # 特征最小值
array([  5., 378.,  69.])

变换所有数据:

>>> scaler.transform(data)
array([[0.        , 0.20813397, 1.        ],
       [0.28125   , 0.        , 0.        ],
       [1.        , 1.        , 0.21212121]])

可以对比我们计算的第一行数据,结果是一样的。

可以用一个fit_transform 方法,来替换两个方法fittransform

2,数据标准化

z-score 标准化是基于正态分布的,该方法假设数据呈现标准正态分布

2.1,什么是正态分布

正态分布也叫高斯分布,是连续随机变量概率分布的一种,它的数学公式是:

其中,u均值(平均数),σ标准差。均值和标准差是正态分布的关键参数,它们会决定分布的具体形态。

正态分布有以下特点:

  • 正态分布以经过均值 u 的垂线为轴,左右对称展开,中间点最高,然后逐渐向两侧下降。
  • 分布曲线和 X 轴组成的面积为 1,表示所有事件出现的概率总和为 1

正态分布就是常态分布,正常状态的分布。在现实生活中,大量随机现象的数据分布都近似于正态分布。

正态分布的分布图为:

μ0σ1时,正态分布为标准正态分布

图中的百分数表示所在面积占总面积的百分比。

2.2,z-score 标准化

z-score 标准化利用正态分布的特点,计算一个给定分数距离平均数有多少个标准差。它的转换公式如下:

其中 x 为原始值,u 为均值,σ 为标准差,x’ 是变换后的值。

经过 z-score 标准化后,高于平均数的分数会得到一个正的标准分,而低于平均数的分数会得到一个负的标准分数。

和归一化相比,z-score 标准化不容易受到噪音数据的影响,并且保留了各维特征对目标函数的影响权重。

2.3,使用 StandardScaler 类

sklearn 库的 preprocessing 模块中的 StandardScaler 类就是用来做z-score 标准化处理的。

首先引入 StandardScaler 类:

>>> from sklearn.preprocessing import StandardScaler

准备要变换的 data 数据,并初始化 StandardScaler 对象:

>>> data = [
 [5, 465, 135], 
 [23, 378, 69], 
 [69, 796, 83]
 ]
>>> scaler = StandardScaler() 

拟合数据:

>>> scaler.fit(data)

输出每个特征的均值和标准差:

>>> scaler.mean_   # 均值
array([ 32.33333333, 546.33333333,  95.66666667])
>>> scaler.scale_  # 标准差
array([ 26.94851058, 180.078378  ,  28.39405259])

变换所有数据:

>>> scaler.transform(data)
array([[-1.01427993, -0.45165519,  1.38526662],
       [-0.34633949, -0.93477815, -0.93916381],
       [ 1.36061941,  1.38643334, -0.44610281]])

3,总结

数据变换的目的是将不同渠道,不同量级的数据转化到统一的范围之内,方便后续的分析处理

不同的机器学习算法,对数据有不同的要求,所以要针对不同的算法,对原始数据进行不同的转换。

数据规范化是常用的数据变化方法,包括归一化和标准化等:

  • 归一化:使用特征值中的最大最小值,把原始值转换为 0 到 1 之间的值。
    • 优点:是简单易行,好理解。
    • 缺点:是容易受最大最小值的干扰。
    • 介绍了 MinMaxScaler 类的使用。
  • 标准化:介绍了 z-score 标准化,原始数据经过转换后,符合标准正态分布。
    • 和归一化相比,z-score 标准化不容易受到噪音数据的影响。
    • 介绍了 StandardScaler 类的使用。

数据变换不一定能提高模型的准确度,但是会提高数据的可解释性。

需要注意的是,对训练数据进行了数据变换之后,在测试模型准确度或者预测数据之前,也要对数据进行同样的数据变换。

(本节完。)


推荐阅读:

决策树算法-理论篇-如何计算信息纯度
决策树算法-实战篇-鸢尾花及波士顿房价预测
朴素贝叶斯分类-理论篇-如何通过概率解决分类问题
朴素贝叶斯分类-实战篇-如何进行文本分类
计算机如何理解事物的相关性-文档的相似度判断

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容