我有多个标签。标签中的元素意味着投票。以下是标签的外观:
array([[ 4, 0, 0, 1, 3, 2, 0, 0],
[ 6, 0, 1, 1, 0, 0, 0, 0],
[ 5, 0, 0, 3, 1, 0, 0, 0],
[ 4, 0, 0, 4, 1, 0, 0, 0],
[ 9, 0, 0, 1, 0, 0, 0, 0],
[ 6, 0, 0, 1, 0, 0, 1, 1],
[ 2, 0, 0, 8, 0, 0, 0, 0],
[ 0, 10, 0, 0, 0, 0, 0, 0],
[ 0, 10, 0, 0, 0, 0, 0, 0],
[ 0, 0, 6, 0, 0, 0, 4, 0]])以下是我尝试过的:
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
nn = mlb.fit_transform(labels_train)
nn[:10]输出:
array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0]])当我尝试inverse_transform()时:
zet = mlb.inverse_transform(nn)
zet[:10]退出:
[(0, 1, 2, 3, 4),
(0, 1, 6),
(0, 1, 3, 5),
(0, 1, 4),
(0, 1, 9),
(0, 1, 6),
(0, 2, 8),
(0, 10),
(0, 10),
(0, 4, 6)]我做错了什么?为什么它以升序显示独特的价值?
发布于 2020-09-13 07:59:41
这看上去很直观。
当我们有一个单标签响应(多类设置)时,编码之前的响应如下:
[1, 4, 2, 3, 5]在编码之后,它变成
[[1,0,0,0,0], [0,0,0,1,0], [0,1,0,0,0], [0,0,1,0,0], [0,0,0,0,1]]表示有i级的存在。但只有一个。类似地,在多标签设置中-
输入应该是- [[1,2,5], [4,1], [2,3] [3], [5,4]]
编码值- [[1,1,0,0,1], [1,0,0,1,0], [0,1,1,0,0], [0,0,1,0,0], [0,0,0,1,1]]
表示(i,j,k)第四类的存在。可以有很多
在编码之前,不需要在数据中保留重复的值。反函数也会以同样的方式工作。
每个样本的标签集,使得y我由每个yt我,j == 1的classes_J组成。
但是,如果您试图再次转换o/p的逆,您将得到相同的编码。
mlb.transform(zet)数组([ 1,1,1,1,0,0,0,0、 1,1,0,0,0,0,1,0,0,0、 1,1,1,1,1,1,0,、 1,1,0,0,0,0,0,0、 1,0,0,0,0,0,0,0,1,0、 1,1,0,0,0,0,1,0,0,0、 1,1,1,0,0,0,0,1,0,、 1,0,0,0,0,0,0,0、 1,0,0,0,0,0,0,0、1,0,0,0,1,0,0,0])
https://datascience.stackexchange.com/questions/81623
复制相似问题