Как построить путаницу матриц разных типов в Python с минимальным кодом? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть 2 numpy массивы, y_actual (фактические значения) и y_pred (прогнозы модели ML), оба имеют двоичные значения, либо 0, либо 1.

В настоящее время я формируюconfusion matrix на основе следующего синтаксиса: -

df_confusion = pd.crosstab(y_actual, y_pred, rownames=['Actual'], colnames=['Predicted'], margins=True)
print('Confusion Matrix:')
print(df_confusion)

Однако я проверил SO и другую документацию и не смог найти исчерпывающий пример с минимальным кодом, который может помочь мне выполнить следующее: -

  1. Сформируйте фигуру путаницы (используя matplotlib или Seaborn, в которой отображается фактическое количество выборок для каждого класса, наряду с метками имен для 0 обозначены Class A, и1 как Class B.
  2. Постройте аналогичный график матрицы смешения, в котором процент выборок, относящихся к каждому классу, отображается (например, истинный положительный коэффициент, уровень ложных срабатываний и т. Д.) В матрице ошибок.
  3. Построить еще одну матрицу путаницы, которая показывает матрицу путаницы, а также шкалу с правой стороны, показывающую количество образцов (например, вот так)plot_confusion_matrix_001.png .Сформируйте аналогичную путаницу для нормализованного случая, как https://scikit -learn.org / stable / _images / sphx_glr_plot_confusion_matrix_001.png .

Кроме того, как указано в вопросе, цель состоит в том, чтобы маркировать класс 0 как Class A и класс 1 как Class B, поскольку в настоящее время они показывают только как 0 и 1 не выглядит очень связным.Я бы предпочел, чтобы минимальный код выполнял то же самое и генерировал последовательные и красивые графики Confusion Matrix.Любая помощь в этом отношении высоко ценится.

1 Ответ

2 голосов
/ 19 марта 2019

Я укажу вам Kaggle , который обладает огромными ресурсами. Вы сможете легко адаптировать приведенный ниже пример под свои нужды.

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix, precision_recall_fscore_support

clf = SVC(kernel = 'linear').fit(x_train,y_train)
clf.predict(x_train)
y_pred = clf.predict(x_test)

# Creates a confusion matrix
cm = confusion_matrix(y_test, y_pred) 

# Transform to df for easier plotting
cm_df = pd.DataFrame(cm,
                     index = ['setosa','versicolor','virginica'], 
                     columns = ['setosa','versicolor','virginica'])

plt.figure(figsize=(5.5,4))
sns.heatmap(cm_df, annot=True)
plt.title('SVM Linear Kernel \nAccuracy:{0:.3f}'.format(accuracy_score(y_test, y_pred)))
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()

enter image description here

...