zoukankan      html  css  js  c++  java
  • 归一化数值

    1. 为什么要归一化?

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

    如:

    两个人的属性对比
    属性 A-person B-persion
    身高 1.75 1.81
    年龄 41 26
    收入 40000 10000

    计算两个人的差异:

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

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

          = 0.0036 + 225 + 900000000

    距离 = diff1/2 = 30000.00375

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

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

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

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

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

    备注:

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

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

     
    属性 最大值 最小值
    身高 1.2 2.1
    年龄 101 16
    收入 100000 500



    经过归一化操作后:

      A-person B-person
    身高归一化值

     = (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.年龄归一化值)+  (A.收入归一化值-B.收入归一化值)

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

          = 0.004624 + 0.003481 + 0.040401

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

    距离 = diff1/2 = 0.2202

  • 相关阅读:
    i++与 ++i的 区 别
    css浮动居中实现2
    a MP4Box GUIYamb介绍
    [教程]安装系统解码器 指导教程
    使用AviSynth将高清mov文件导入并重编码为MKV、MP4
    VS2008常用快捷键
    AvsP介绍——非常好用的AviSynth辅助工具
    C/C++语言中Static的作用详述
    [教程]使用Lite MP4 Tool专业制作MP4(AVC)视频格式 指导教程
    Moving Rows in CListCtrl
  • 原文地址:https://www.cnblogs.com/voipman/p/5046153.html
Copyright © 2011-2022 走看看