错误:分类指标无法处理多类多输出和多标签指标目标的混合

Posted

技术标签:

【中文标题】错误:分类指标无法处理多类多输出和多标签指标目标的混合【英文标题】:Error: Classification metrics can't handle a mix of multiclass-multioutput and multilabel-indicator targets 【发布时间】:2018-12-03 08:15:19 【问题描述】:

总的来说,我是机器学习的新手。

我正在尝试进行多标签文本分类。我将这些文档的原始标签以及分类结果(使用 mlknn 分类器)表示为一个热编码(19000 个文档 x 200 个标签)。现在我正在尝试使用 f1_score 微观和宏观评估分类,但我收到此错误(在第 3 行)ValueError: Classification metrics can't handle a mix of multiclass-multioutput and multilabel-indicator targets,我不知道如何解决它。这是我的代码:

1. y_true = np.loadtxt("target_matrix.txt")
2. y_pred = np.loadtxt("classification_results.txt")

3. print (f1_score(y_true, y_pred, average='macro'))
4. print (f1_score(y_true, y_pred, average='micro'))

我还尝试使用cross_val_score 进行分类以立即获得评估,但遇到了另一个错误(来自cross_val_score 行):

File "_csparsetools.pyx", line 20, in scipy.sparse._csparsetools.lil_get1
File "_csparsetools.pyx", line 48, in scipy.sparse._csparsetools.lil_get1
IndexError: column index (11) out of bounds

这是我的代码:

X = np.loadtxt("docvecs.txt", delimiter=",")
y = np.loadtxt("target_matrix.txt", dtype='int')

cv_scores = []
mlknn = MLkNN(k=10)  
scores = cross_val_score(mlknn, X, y, cv=5, scoring='f1_micro')
cv_scores.append(scores)

非常感谢任何一个错误的帮助,谢谢。

【问题讨论】:

【参考方案1】:

你能显示 y 的前几个元素吗?你在使用 scikit-multilearn 吗?另外,如果您可以使用 scikit-multilearn 的 0.1.0 候选版本,第二个错误很可能是 master 中修复的错误,并且计划在几天内发布新版本。

你可以通过pip获取master: pip uninstall -y scikit-multilearn pip install https://github.com/scikit-multilearn/scikit-multilearn/archive/master.zip

【讨论】:

感谢您的回复,我刚刚发现我创建的 y 错误。我会写一个答案:)【参考方案2】:

我手动创建了 y 数组,这似乎是我的错误。我现在使用MultiLabelBinarizer 来创建它,如下例所示,现在它可以工作了:

train_foo = [['sci-fi', 'thriller'],['comedy'],['sci-fi', 'thriller'],['comedy']]
mlb = MultiLabelBinarizer()
mlb_label_train = mlb.fit_transform(train_foo)

X = np.loadtxt("docvecs.txt", delimiter=",")
cv_scores = []
mlknn = MLkNN(k=3) 
scores = cross_val_score(mlknn, X, mlb_label_train, cv=5, scoring='f1_macro')
cv_scores.append(scores)

您可以找到MultiLabelBinarizer here 的文档。

【讨论】:

以上是关于错误:分类指标无法处理多类多输出和多标签指标目标的混合的主要内容,如果未能解决你的问题,请参考以下文章

Python Sklearn“ValueError:分类指标无法处理多类多输出和二进制目标的混合”错误

如何处理 ValueError:分类指标无法处理多标签指标和多类目标错误的混合

Python scikit 学习多类多标签性能指标?

精度分数错误:分类指标无法处理多类和连续目标的混合[重复]

ValueError:分类指标无法处理多标签指标和二元目标的混合

ValueError:分类指标无法处理多标签指标和连续多输出目标的混合