我一般是机器学习的新手。
我正在尝试进行多标签文本分类。我具有这些文档的原始标签以及表示为一种热编码(19000文档x 200标签)的分类结果(使用的mlknn分类器)。现在,我正在尝试使用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)
非常感谢您对其中一个错误的任何帮助。
答案 0 :(得分:1)
可以显示y的前几个元素吗?您正在使用scikit-multilearn吗?另外,如果可以,请使用scikit-multilearn的0.1.0发行候选版本,第二个错误很可能是master中修复的错误,并且计划在两天内发布新版本。
您可以通过pip获得主控:
pip uninstall -y scikit-multilearn
pip install https://github.com/scikit-multilearn/scikit-multilearn/archive/master.zip
答案 1 :(得分:1)
我正在手动创建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的文档。