手动实现one-hot独热编码的过程

作者: Andy9918 | 来源:发表于2019-06-03 19:31 被阅读0次

    一般我们实现ont-hot编码通过sk-lean中的OneHotEncoder来实现,今天发现一个实现one-hot的编码的手动实现方式,感觉比较有意思,给大家分享一下。
    下面是手动实现one-hot的过程:
    1、首先加载numpy和pandas

    import numpy as np
    import pandas as pd
    

    2、需要转化成独热编码的数据,假设这里有10个数据,5个不同的值。

    # 需要转化为独热编码的数据
    labels_dense = pd.Series([2,3,2,1,4,0,3,1,4,1])
    labels_dense
    
    需要转化为独热编码的数据

    3、偏移量定义量

    index_offset=np.arange(labels_dense.shape[0]) * 5
    print(index_offset)
    

    输出结果:
    [ 0 5 10 15 20 25 30 35 40 45]
    4、建一个10行5列的数据,因为我们要把10个数据改成5个值的one-hot编码,形状就是这样样子的

    labels_one_hot=np.zeros((10,5))
    labels_one_hot
    
    10行5列的0

    5、完成one-hot编码赋值
    通过numpy.ndarray.flat[]把一个10 * 5的矩阵看成是一个1 * 50的行向量,对这个1 * 50的行向量在index_offset+labels_dense.ravel()位置的值赋值为1即完成了one-hot编码

    labels_one_hot.flat[index_offset+labels_dense.ravel()]=1
    

    index_offset+labels_dense.ravel()是什么?

    print(index_offset+labels_dense.ravel())
    

    [ 2 8 12 16 24 25 33 36 44 46]
    6、看看最后的独热编码结果是什么?

    print(labels_one_hot)
    
    one-hot编码结果

    特别说明一下扁平化处理

    扁平化

    相关文章

      网友评论

        本文标题:手动实现one-hot独热编码的过程

        本文链接:https://www.haomeiwen.com/subject/rbshxctx.html