我有一个多类分类任务。当我根据scikit example运行脚本时,如下所示:

classifier = OneVsRestClassifier(GradientBoostingClassifier(n_estimators=70, max_depth=3, learning_rate=.02))

y_pred = classifier.fit(X_train, y_train).predict(X_test)
cnf_matrix = confusion_matrix(y_test, y_pred)

我收到此错误:
File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\metrics\classification.py", line 242, in confusion_matrix
    raise ValueError("%s is not supported" % y_type)
ValueError: multilabel-indicator is not supported

我试图将labels=classifier.classes_传递给confusion_matrix(),但这无济于事。

y_test和y_pred如下:
y_test =
array([[0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 1, 0],
   [0, 1, 0, 0, 0, 0],
   ...,
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 1, 0]])


y_pred =
array([[0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0],
   ...,
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 0, 0, 0]])

最佳答案

首先,您需要创建标签输出数组。
假设您有3个类别:'cat','dog','house'索引为:0,1,2。
对2个样本的预测是:“狗”,“房子”。
您的输出将是:

y_pred = [[0, 1, 0],[0, 0, 1]]

运行y_pred.argmax(1)得到:[1,2]
此数组代表原始标签索引,表示:
['狗','房子']
num_classes = 3

# from lable to categorial
y_prediction = np.array([1,2])
y_categorial = np_utils.to_categorical(y_prediction, num_classes)

# from categorial to lable indexing
y_pred = y_categorial.argmax(1)

关于python - 如何在Scikit中计算用于多类分类的混淆矩阵?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43665041/

10-12 23:57