美文网首页
label_binarize、LabelBinarizer和La

label_binarize、LabelBinarizer和La

作者: 一只怂货小脑斧 | 来源:发表于2020-08-26 15:50 被阅读0次

    这几个玩意儿对于一个小白来说,真的被绕死了。

    先来一个别人的解释

    https://www.jianshu.com/p/2a30846eb4f0

    小白总结一下个人理解的,分类变量编码转换方法:

    LabelEncoder

    LabelEncoder可以将值转换为0~n-1个类型,也可以用来将非数值的标签转换为数值标签(需要确保非数值标签是可比的和可哈希的)

    即,将类型变量转换为数值组成的数组。产生结果为连续型特征。

    from sklearn import preprocessing
    le = preprocessing.LabelEncoder()
    y=["paris", "paris", "tokyo", "amsterdam"]
    y_le = le.fit_transform(y)
    print('=========y_le is========= ')
    print(y_le)
    print('=========classes is========= ')
    print(list(le.classes_))
    

    得到的结果为:

    =========y_le is========= 
    [1 1 2 0] 
    =========classes is========= 标签列表
    ['amsterdam', 'paris', 'tokyo']
    

    OneHotEncoder

    将数值类型属性转换成独热编码的数值型数组。使用LabelEncoder会以为两个相近的数字比两个较远的数字更为相似一些,为了解决这个问题,使用独热编码,即OneHot编码,得到的输出结果默认是稀疏矩阵,可以使用toarray()方法完成转换。

    label_binarize

    from sklearn.preprocessing import label_binarize
    
    label_binarize(y, classes, neg_label=0, pos_label=1, sparse_output=False)
    

    固定类别数量的标签转换(1.受到classes顺序的影响;2.如果某类不存在,则相应位置为0)

    例如:

    from sklearn.preprocessing import label_binarize
    
    array=label_binarize([1, 6], classes=[1, 2, 4, 6])
    
    print('=========array is========= ')
    print(array)
    
    array1=label_binarize([1, 6], classes=[1, 6, 4, 2])
    
    print('=========array1 is========= ')
    print(array1)
    

    得到的结果为:

    =========array is=========
    [[1 0 0 0]
     
    [0 0 0 1]]
     
    =========array1 is=========
     
    [[1 0 0 0]
     
    [0 1 0 0]]
    

    LabelBinerizer

    from sklearn.preprocessing import LabelBinarizer
    y_bina=LabelBinarizer().fit_transform(y)
    

    LabelBinarizer将标签二值化为一对多的形式。默认直接返回一个密集的NumPy数组,通过使用sparse_output=True给LabelBinarizer构造函数,可以得到稀疏矩阵。与label_binarize结果形式一致,只是不固定标签数量,以传入的标签为准。

    总结

    LabelEncoder:将类型变量转换为数值组成的数组。

    LabelBinerizer:将标签二值化为一对多的形式。不限定类别数量,取输入标签的类别

    label_binarize:将标签二值化为一对多的形式。限定类别数量。如果某类别在所有标签中均未出现,则对应未知为0

    在标签数量一致的情况下,LabelBinerizer 和 label_binarize 的结果是一样的。如果已知标签数量,但是输入的标签样本不全,那么最好使用label_binarize,若使用 LabelBinerizer,则未在标签样本中出现的标签值会不被识别

    即:

    n_class = len(set(y)) # 类别数量
    le = LabelEncoder() 
    y_le = le.fit_transform(y)
    y_bina=LabelBinarizer().fit_transform(y)
    y_bina1 = label_binarize(y_le, np.arange(n_class))
    

    结果:
    y_bina = y_bina

    相关文章

      网友评论

          本文标题:label_binarize、LabelBinarizer和La

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