zoukankan      html  css  js  c++  java
  • one-hot编码

    1、为什么要用这个编码?

    将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理。

    2、什么情况下使用one-hot编码(独热编码)?

    在很多学习任务中,特征并不总是连续值,而有可能是分类值。

    离散特征的编码分为两种情况:

      1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码

      2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}

    3、为了解决上述问题,其中一种可能的解决方法是采用独热编码(One-Hot Encoding)。

    独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。

    例如:

    自然状态码为:000,001,010,011,100,101(6种状态)

    独热编码为:000001,000010,000100,001000,010000,100000(6位二元特征值)

    可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。

    这样做的优点:

    1. 解决了分类器不好处理属性数据的问题

    2. 在一定程度上也起到了扩充特征的作用(稀疏性) 

    3. 它的值只有0和1,不同的类型存储在垂直的空间

     缺点:当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用。

  • 相关阅读:
    vsftpd 启动 vsftpd:500 OOPS: bad bool value in config file for: guest_enable
    Vsftpd服务传输文件(转)
    搭建FTP服务
    sed命令
    创建服务类脚本
    jvm 方法区
    B+与B-树
    适配器模式
    java 垃圾回收总结(可达性分析 引用分类
    HBase常见问题答疑解惑【持续更新中】
  • 原文地址:https://www.cnblogs.com/h694879357/p/13379647.html
Copyright © 2011-2022 走看看