scikit-learn - MultiLabelBinarizer:inverse_transform 在单个样本上失败?
问题描述
我想将inverse_transform
MultiLabelBinarizer 应用于单个样本,例如:
labels = ['Architektur & Garten',
'Ganzheitliches Bewusstsein',
'Glaube & Ethik',
'Kinderbuch & Jugendbuch',
'Künste',
'Literatur & Unterhaltung',
'Ratgeber',
'Sachbuch']
samples = []
for l in labels:
samples.append([l])
from sklearn.preprocessing import MultiLabelBinarizer
m = MultiLabelBinarizer()
m.fit_transform(samples)
如果我现在将 MultiLabelBinarizer 应用于矩阵,它可以工作:
s = np.array([[0, 1, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1]])
m.inverse_transform(s)
[('Ganzheitliches Bewusstsein',), ('Sachbuch',)]
但是,如果我尝试将其应用于单个样本,即它失败的向量:
import numpy as np
s = np.array([0, 1, 0, 0, 0, 0, 0, 0])
m.inverse_transform(s)
--> 957 if yt.shape[1] != len(self.classes_):
958 raise ValueError('Expected indicator for {0} classes, but got {1}'
959 .format(len(self.classes_), yt.shape[1]))
解决方案
从您的评论来看,您似乎已经解决了它。如果这对其他人有帮助,请提供更多详细信息:
在第一个例子中,如果我们打印s
我们得到的尺寸(2, 8)
:
>>> s = np.array([[0, 1, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1]])
>>> s.shape
(2,8)
在第二个例子中,如果我们做同样的事情,我们会得到(8,)
:
>>> s = np.array([0, 1, 0, 0, 0, 0, 0, 0])
>>> s.shape
(8,)
问题出在第二个示例中,错误inverse_transform
抛出有助于表明它期望yt.shape[1]
可用。在第二个示例中,该维度不可用,因此出现错误。
这可以通过两种方式解决:
- 只需添加方括号:
s = np.array([0, 1, 0, 0, 0, 0, 0, 0])
变为s = np.array(
[[0, 1, 0, 0, 0, 0, 0, 0]
])
- 重塑:
s = np.reshape(s, (1, s.shape[0]))
无论哪种方式,s.shape
after的输出(1, 8)
都m.inverse_transform(s)
将按预期工作。
推荐阅读
- php - 正则表达式在字符串末尾仅保留 1 个正斜杠
- mysql - Spring NativeQuery 和默认 EntityBased 结果
- jquery - ajax POST 方法获取“HTML”数据
- r - 如何删除重复的 x 轴标签?
- validation - Keycloak从注册表中删除名字和姓氏
- c++ - visualStudio 2017 中的 sfml 静态链接错误
- python - 在与多个外键关联的视图中接收对象。姜戈,蟒蛇
- javascript - redux store 内部如何订阅(取消订阅)?
- c++ - 向量不从 cin 获取输入
- php - 在 txt 文件中检索数据以使用它 php 脚本