将标签转为onehot形式

背景

对于给定具体标签,如何将其转为one-hot形式?比如标签集合体育', '娱乐', '家居', '房产', '教育', '时尚', '时政', '游戏', '科技', '财经',对于multiclass任务,如何将训练数据集中的样本的标签转为one-hot形式?

方法1:

    import numpy as np
    label_list = ['体育', '娱乐', '家居', '房产', '教育', '时尚', '时政', '游戏', '科技', '财经']
    label_dict = { l: i for i, l in enumerate(label_list)}

    data_labels = np.array(["娱乐", "体育", "房产", "科技", "财经"])
    data_label_ids = list(map(label_dict.get, data_labels))
    one_hot = np.zeros((data_labels.size, len(label_list)), dtype=np.int8)
    one_hot[np.arange(data_labels.size), data_label_ids] = 1
    print(one_hot)

输出结果如下:

[[0 1 0 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 1 0]
 [0 0 0 0 0 0 0 0 0 1]]

方法2:

使用np.eye

    import numpy as np
    label_list = ['体育', '娱乐', '家居', '房产', '教育', '时尚', '时政', '游戏', '科技', '财经']
    label_dict = { l: i for i, l in enumerate(label_list)}

    data_labels = np.array(["娱乐", "体育", "房产", "科技", "财经"])
    data_label_ids = list(map(label_dict.get, data_labels))
  
    # 方法2
    one_hot = np.eye(len(label_list), dtype=np.int8)[data_label_ids]
    print(one_hot)

输出结果如下:

[[0 1 0 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 1 0]
 [0 0 0 0 0 0 0 0 0 1]]

方法3:

使用sklearn.preprocessing.LabelBinarizer

    import numpy as np
    label_list = ['体育', '娱乐', '家居', '房产', '教育', '时尚', '时政', '游戏', '科技', '财经']
    label_dict = { l: i for i, l in enumerate(label_list)}

    data_labels = np.array(["娱乐", "体育", "房产", "科技", "财经"])
    data_label_ids = list(map(label_dict.get, data_labels))

    # 方法3:
    import sklearn.preprocessing
    label_binarizer = sklearn.preprocessing.LabelBinarizer()
    label_binarizer.fit(range(len(label_list)))
    one_hot = label_binarizer.transform(data_label_ids)
    print(one_hot)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值