Я работаю с многокомпонентной классификацией на фактических данных и прогнозируемых данных из моего классификатора.Фактические данные состоят из трех классов (с1, с2 и с3), и таким же образом прогнозируемые данные также состоят из трех классов (с1, с2 и с3).Данные следующие:
Actual_data Predicted_data
c1 c2 c3 c1 c2 c3
1 1 0 1 1 1
1 1 0 1 0 1
1 0 1 0 1 1
0 1 1 1 0 0
1 0 0 1 1 0
1 1 1 1 0 1
В классификации с несколькими метками документ может принадлежать более чем одному классу.В приведенных выше данных 1 представляет документ принадлежит определенному классу, а 0 представляет документ не принадлежит конкретному классу.
Первая строка Actual_data представляет документ принадлежит классу c1 и c2 и не принадлежит классуc3.Точно так же первая строка предикатных_данных, представляющих документ, принадлежит классам с1, с2 и с3.
Изначально я использовал R-программирование для нахождения матрицы путаницы между фактическими данными и прогнозируемыми данными.Я сохранил эти фреймы данных в y_actual и y_predict.
y_actual<-as.matrix(Actual_data)
y_predict<-as.matrix(Predicted_data)
xtab<-table(y_actual,y_predict)
Выходная таблица xtab равна
y_predict
y_actual 0 1
0 1 5
1 5 7
Затем я создал матрицу путаницы с использованием пакета каретки R, который приведен ниже
library(caret)
confusionMatrix(xtab)
Confusion Matrix and Statistics
y_predict
y_actual 0 1
0 1 5
1 5 7
Accuracy : 0.4444
95% CI : (0.2153, 0.6924)
No Information Rate : 0.6667
P-Value [Acc > NIR] : 0.9856
Kappa : -0.25
Mcnemar's Test P-Value : 1.0000
Sensitivity : 0.16667
Specificity : 0.58333
Pos Pred Value : 0.16667
Neg Pred Value : 0.58333
Prevalence : 0.33333
Detection Rate : 0.05556
Detection Prevalence : 0.33333
Balanced Accuracy : 0.37500
'Positive' Class : 0
В этом случае у меня нет матрицы путаницы с несколькими метками, вместо этого я получил матрицу путаницы с двоичными метками.Мне нужна запутанная матрица с c1, c2, c3 в y-фактическом, а также y-предсказывать вместо 0,1 в y-фактическом и y-предсказывать.
Затем я искал в интернете пакет utimlиспользуется для классификации по нескольким меткам в R, но это не обеспечивает желаемый результат.Затем я попробовал пакет Python Scikit для классификации по нескольким меткам, код приведен ниже.
import numpy as np
from sklearn.metrics import multilabel_confusion_matrix
y_actual = np.array([[1, 1, 0],
[1, 1, 0],
[1, 0, 1],
[0, 1, 1],
[1, 0, 0],
[1, 1, 1]])
y_predict = np.array([[1, 1, 1],
[1, 0, 1],
[0, 1, 1],
[1, 0, 0],
[1, 1, 0],
[1, 0, 1]])
matrix = multilabel_confusion_matrix(y_actual, y_predict)
print(matrix)
print(classification_report(y_actual,y_predict))
Вывод программы:
[[[0 1]
[1 4]]
[[0 2]
[3 1]]
[[1 2]
[1 2]]]
precision recall f1-score support
0 0.80 0.80 0.80 5
1 0.33 0.25 0.29 4
2 0.50 0.67 0.57 3
micro avg 0.58 0.58 0.58 12
macro avg 0.54 0.57 0.55 12
weighted avg 0.57 0.58 0.57 12
samples avg 0.53 0.61 0.54 12
В этом случае я тоже не являюсьполучить выходной ярлык мудрым.Может ли кто-нибудь помочь мне, какой пакет нужно использовать, чтобы получить матрицу путаницы с несколькими метками для вышеуказанных фактических и прогнозируемых данных на любой платформе (R-программирование, Python или Weka).На выходе матрица путаницы должна быть матрицей 3 * 3 для c1, c2 и c3 для y_actual и y_predict.
y_predict
y_actual c1 c2 c3
c1 4
c2 1
c3 2
Здесь диагональный элемент предполагает, что на самом деле он принадлежит c1, а классификатор предсказал, что он принадлежит c1.Аналогично для с2 и с3.Мой вопрос заключается в том, как получить другие значения матрицы путаницы, поскольку это классификация по нескольким меткам.Эта проблема не является проблемой классификации нескольких классов, это проблема классификации нескольких меток.