Матрица неточностей и отчет о классификации - PullRequest
0 голосов
/ 06 мая 2020

Я успешно создал простую 1D CNN для классификации с 3 классами. В процессе обучения сохраняю модель и вес в файлы yaml и h5. Затем в процессе тестирования я успешно загружаю модель и вес и использую их для классификации в реальном времени, возвращая класс в качестве выходных данных. Однако я также тестирую свою модель с помощью тестовых данных и хочу видеть в ней матрицу путаницы. Вот код, который я сделал:

from keras.models import model_from_yaml
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, confusion_matrix
import os
from numpy import array
import numpy as np
import pandas as pd

# load YAML and create model
yaml_file = open('a32.yaml', 'r')
loaded_model_yaml = yaml_file.read()
yaml_file.close()
loaded_model = model_from_yaml(loaded_model_yaml)

# load weights into new model
loaded_model.load_weights("a32.h5")
print("Loaded model from disk")

loaded_model.compile(
    loss='sparse_categorical_crossentropy',
    optimizer='adam',
    metrics=(['accuracy'])
)

#Load data
test_data=pd.read_csv('data/ccpp/t2datn.csv',header=None)
test=test_data.iloc[:,0:2]

#Normalized test set
scaler=StandardScaler().fit(test)
x_test=scaler.transform(test)
y=np.expand_dims(x_test,axis=2)

#Make a prediction
predictions = loaded_model.predict(y)
ynew = loaded_model.predict_classes(y)

yp = np.argmax(predictions, axis=1)
#print(yp)
print("Confusion Matrix")
print(confusion_matrix(ynew, yp))
print("Classification Report")
target_names = ['Too High', 'Normal', 'Too Low']
print(classification_report(ynew,yp, target_names=target_names))

Но я всегда получаю результат как 100% классифицированный для каждого класса. Однако, когда я оцениваю тестовые данные, точность составляет всего около 80%. Можете ли вы сказать мне, какая часть кода матрицы путаницы неверна?

Вывод:

Confusion Matrix
[[1967    0    0]
 [   0 3252    0]
 [   0    0 1159]]
Classification Report
              precision    recall  f1-score   support

    Too High       1.00      1.00      1.00      1967
      Normal       1.00      1.00      1.00      3252
     Too Low       1.00      1.00      1.00      1159

    accuracy                           1.00      6378
   macro avg       1.00      1.00      1.00      6378
weighted avg       1.00      1.00      1.00      6378

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

ynew и yp, оба являются вашими прогнозами модели, полученными от predict_classes() и predict() соответственно.

В то время как confusion_matrix () и classification_report () принимают входные данные как - confusion_matrix(y_true, y_pred), где y_true - целевой класс, а y_pred - в прогнозе модели.

Вы должны ввести свою цель вместо ynew.

0 голосов
/ 06 мая 2020

В отчете о классификации вы сравниваете ynew и yp, которые в основном одинаковы, но вычисляются по-разному. Вы должны сравнить ynew с y_groundtruth.

...