MultiLabelBinarizer详解

 

多标签分类格式

对于多标签分类问题而言,一个样本可能同时属于多个类别。如一个新闻属于多个话题。这种情况下,因变量yy需要使用一个矩阵表达出来。

而多类别分类指的是y的可能取值大于2,但是y所属类别是唯一的。它与多标签分类问题是有严格区别的。所有的scikit-learn分类器都是默认支持多类别分类的。但是,当你需要自己修改算法的时候,也是可以使用scikit-learn实现多类别分类的前期数据准备的。

多类别或多标签分类问题,有两种构建分类器的策略:One-vs-All及One-vs-One。下面,通过一些例子进行演示如何实现这两类策略。

#
from sklearn.preprocessing import MultiLabelBinarizer
y = [[2,3,4],[2],[0,1,3],[0,1,2,3,4],[0,1,2]]
MultiLabelBinarizer().fit_transform(y) #这里没指名classes 则classes从训练数据获取这里为                        
                                       #[0,1,2,3,4]

array([[0, 0, 1, 1, 1],
       [0, 0, 1, 0, 0],
       [1, 1, 0, 1, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 0, 0]])

 

其实classes是设置label位置,为了好理解我举个例子吧

若 classes= [2,3,4,5,6,1] ,则2值的索引为0,3值的索引为1,依次类推

所以当y=[(1, 2), (3,4),(5,)] , 1值在classes中的索引为5,所以经fit_transform后变成[0,0,0,0,1],对应索引为5的位置为1

2值在classes中的索引为0,所以经fit_transform后变成[1,0,0,0,0],对应索引为0的位置为1

看下面的结果:我猜你应该明白了~


In [3]: from sklearn.preprocessing import MultiLabelBinarizer
   ...: mlb = MultiLabelBinarizer(classes = [2,3,4,5,6,1])
   ...: mlb.fit_transform([(1, 2), (3,4),(5,)])
   ...:
Out[3]:
array([[1, 0, 0, 0, 0, 1],
       [0, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 0, 0]])
 
In [4]: mlb.classes_
Out[4]: array([2, 3, 4, 5, 6, 1])
  1.  

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值