Значение точности не соответствует результату прогноза моей модели keras - PullRequest
0 голосов
/ 02 июля 2018

Мой код указан ниже, а данные об обучении и тестировании можно найти здесь:

данные испытаний

данные обучения

Точность вывода составляет 0,55, однако, когда я сохраняю прогноз в файл и сравниваю его с результатами тестирования. из 380 записей только 72 результаты классифицированы правильно. Так почему же я получаю точность = 0,55?

import seaborn as sns
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.utils import np_utils
from keras import optimizers

def one_hot_encode_object_array(arr):
    '''One hot encode a numpy array of objects (e.g. strings)'''
    uniques, ids = np.unique(arr, return_inverse=True)
    return np_utils.to_categorical(ids, len(uniques))

fields = ['dataResult','HomeWin','Draw','AwayWin']
traindata =pd.read_csv('17-18.csv', usecols=fields)
train_X = traindata.values[:, 1:4]
train_Y = traindata.values[:, 0]
train_y_ohe = one_hot_encode_object_array(train_Y)

testdata =pd.read_csv('16-17.csv', usecols=fields)

test_X = testdata.values[:, 1:4]
test_Y = testdata.values[:, 0]
test_y_ohe = one_hot_encode_object_array(test_Y)

model = Sequential()
model.add(Dense(16, input_shape=(3,)))
model.add(Activation('relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(3))
model.add(Activation('softmax'))

model.compile(optimizers.Adam(lr=0.001), loss='categorical_crossentropy', metrics=["accuracy"])
model.fit(train_X, train_y_ohe, epochs=100, batch_size=1, verbose=1, validation_data=(test_X, test_y_ohe))
loss, accuracy = model.evaluate(test_X, test_y_ohe, verbose=1)
print("Accuracy = {:.2f}".format(accuracy))
prediction = model.predict(test_X)
print(prediction)
np.savetxt('prediction.csv',prediction ,delimiter=',')

Обновление: Оказалось, это моя глупость, мои поля fields = ['dataResult','HomeWin','Draw','AwayWin']

Когда я передаю функцию горячего кодирования с помощью train_Y, я думал, что [1,0,0] означает HomeWin, [0,1,0] - Draw, а [0, 0, 1] - отсутствую.

Оказалось, что [0, 0, 1] является домолином, а [1,0,0] отсутствует. Кто-нибудь знает хороший способ преобразования одного горячего кодирования обратно в метку?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

У вас есть ошибка в вашем коде. Вы используете поезд для теста !!!

Изменение

test_X = traindata.values[:, 1:4]
test_Y = traindata.values[:, 0]

с

test_X = testdata.values[:, 1:4]
test_Y = testdata.values[:, 0]
0 голосов
/ 02 июля 2018

Категориальная точность модели Keras вычисляет, как часто прогнозы имеют максимум в том же месте, что и истинные значения, а не средние значения:

categorical_accuracy = K.mean(K.equal(K.argmax(y_true, axis=-1), K.argmax(y_pred, axis=-1)))

Проконсультируйтесь далее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...