• 【知识相关】机器学习之独热编码(One-Hot)详解(代码解释)


    One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。

    One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

    听概念的话显得比较复杂,我们来看一个例子。

    假设我们有一群学生,他们可以通过四个特征来形容,分别是:

    • 性别:[“男”,“女”]
    • 年级:[“初一”,“初二”,“初三”]
    • 学校:[“一中”,“二中”,“三中”,“四中”]

    举个例子,用上述四个特征来描述小明同学,即“男生,初一,来自二中”,如果特征类别是有序的话,我们能够用表示顺序的数组表示

    即“男生,初一,来自一中”   ==>   [0,0,1]

    但是这样的特征处理并不能直接放入机器学习算法中,因为类别之间是无序的

    这时候就可以用独热编码的形式来表示了,我们用采用N位状态寄存器来对N个状态进行编码,拿上面的例子来说,就是:

    性别 [“男”,“女”] N=2

    男:1 0

    女:0 1

    年级 [“初一”,“初二”,“初三”] N=3

    初一:1 0 0  

    初二:0 1 0

    初三:0 0 1

    学校 [“一中”,“二中”,“三中”,“四中”] N=4

    一中:1 0 0 0

    二中:0 1 0 0

    三中:0 0 1 0

    四中:0 0 0 1

    因此,当我们再来描述小明的时候,就可以采用 [1 0 1 0 0 0 1 0 0] 

    很多人在介绍独热编码的时候,都引用了下面这段代码,但是解释的比较模糊,下面详细解释一下。

    from sklearn import preprocessing  
    
    enc = preprocessing.OneHotEncoder()  
    enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  #这里一共有4个数据,3种特征
    array = enc.transform([[0,1,3]]).toarray()  #这里使用一个新的数据来测试
    print(array) # [[ 1 0 0 1 0 0 0 0 1]]

    这里一共有四个数据,三种特征,是那四个呢,我们列出矩阵

      第一种 第二种 第三种
    第一个 0 0 3
    第二个 1 1 0
    第三个 0 2 1
    第四个 1 0 2

    我们竖着看,可以看出第一种特征中只有0、1两类,第二组有0,、1、2三类,第三种有0、1、2、3四类,因此分别可以用2、3、4个状态类来表示。

    enc.transform就是将[0,1,3]这组特征转换成one hot编码,toarray()则是转成数组形式。

    第一个数为0,对应第一种特征则为 1 0

    第二个数为1,对应第二种特征则为 0 1 0

    第三个数为3,对应第三种特征则为 0 0 0 1。 

    所以最后的输出为:[[ 1 0 0 1 0 0 0 0 1]]

    同样的,当我们拿小明的表述[0,0,1]来测试的时候,得到了与第一个例子相同的结果。

    from sklearn import preprocessing  
       
    enc = preprocessing.OneHotEncoder()  
    enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  #这里一共有4个数据,3种特征
       
    array = enc.transform([[0,0,1]]).toarray()  #这里使用一个新的数据来测试
       
    print(array)   [[1. 0. 1. 0. 0. 0. 1. 0. 0.]]
  • 相关阅读:
    70. Climbing Stairs(动态规划)
    53. Maximum Subarray(动态规划)
    PAT 1045. Favorite Color Stripe
    PAT 1044. Shopping in Mars
    分治策略
    时间复杂度和空间复杂度分析(转载)
    [转载]论坛中某位达人自己编写的Morlet连续小波变换程序
    连续小波时频图绘制原理    连续小波变换尺度与信号频率的关系
    Matlab中wavedec使用學習及詳解
    [转载]转载:小波分解层数与尺度的关系
  • 原文地址:https://www.cnblogs.com/lky-learning/p/12398873.html
Copyright © 2020-2023  润新知