热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【机器学习】归一化数值

1.为什么要归一化?表示一个事物有不同的维度{即:属性},每个属性的取值范围不同,导致计算时

1. 为什么要归一化?

表示一个事物有不同的维度{即:属性},每个属性的取值范围不同,导致计算时此属性占用的权重不同,即数据的量纲不同,量纲小的数据容易受到量纲大的数据影响。

如:

 

 

 

 

 

 

计算两个人的差异:

diff = (A.身高-B.身高)2 +  (A.年龄-B.年龄)2 +  (A.收入-B.收入)2 

      = (1.75-1.81)2 +  (41-26)2 + (40000-10000)2 

      = 0.0036 + 225 + 900000000

距离 = diff1/2 = 30000.00375

问题来了,看这些属性,发现收入占用的权重太高,身高和年龄占用的权重相对较低,怎么弱化收入占用的权重呢?

我们把身高,年龄和收入这些属性映射到一个单位区间(0,1)中。


图中,根据梯形的特点可以得到如下公式

 

(1 – 0) / (max – min) = (归一化值 – 0) / (属性值 – min)

 

所以,归一化值 =  (属性值 – min) / (max – min) 

备注:

这种方法的优点是:可以把数据压缩到0-1空间内,但是对量纲大的数据压缩比例比较大。

 

假如3个属性最大和最小值如下:

 

 

 

 

经过归一化操作后:

 = (1.75-1.2)/(2.1-1.2) 

 = 0.55 / 0.9

 = 0.61

 = (1.81-1.2)/(2.1-1.2) 

 = 0.61 / 0.9

 = 0.678

 = (41-16)/(101-16) 

 = 25 / 85

 = 0.294

= (26-16)/(101-16) 

 = 20 / 85

 = 0.235

= (40000-500)/(100000-500) 

 = 39500 / 99500

 = 0.397

= (10000-500)/(100000-500) 

 = 19500 / 99500

 = 0.196

 

 

 

 

 

 

 

 

 

 

 

 

使用归一化值计算两个人的差异:

diff = (A.身高归一化值-B.身高归一化值)2 +  (A.年龄归一化值-B.年龄归一化值)2 +  (A.收入归一化值-B.收入归一化值)2 

      = (0.61-0.678)2 +  (0.294-0.235)2 + (0.397-0.196)2 

      = 0.004624 + 0.003481 + 0.040401

计算的值可以看出,3个属性占用的权重在一个数量级上,每个属性都不会独大。

距离 = diff1/2 = 0.2202

 



推荐阅读
author-avatar
喂╲偶稀飯妳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有