Neural network 精度值不为';与我的keras模型的预测结果不匹配

Neural network 精度值不为';与我的keras模型的预测结果不匹配,neural-network,keras,Neural Network,Keras,下面列出了我的代码,可以在这里找到培训数据和测试数据: 然而,当我将预测保存到文件并与测试数据的结果进行比较时,输出的精度是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 S

下面列出了我的代码,可以在这里找到培训数据和测试数据:

然而,当我将预测保存到文件并与测试数据的结果进行比较时,输出的精度是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输入one hot encode函数时,我认为[1,0,0]意味着HomeWin,[0,1,0]是Draw,[0,0,1]是awayWin

结果[0,0,1]是homewin,[1,0,0]是awayWin。
有人知道将一个热编码转换回标签的好方法吗?

Keras模型分类准确度计算预测值与真实值(而非平均值)在同一位置的最大频率:

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

如果代码中有错误,请进一步咨询。您正在使用火车进行测试

改变

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


嗨,我的不是二进制类,结果是homewin、draw或awaywin。所以损失是“绝对熵”。尽管如此,对于我所有的380行,0.57的准确度应该能给我大约190个正确的预测?啊,这就解释了!分类的准确性不同,我相应地编辑了我的答案。请在datascience.stackexchange.com上查看并更新原始答案抱歉,但我不确定0.57的准确度如何仅给出72个正确预测?它检查三个类中的每一类,预测值与真实值在同一位置的最大频率。您可以尝试使用答案中的公式手动计算分类准确度。好吧,似乎我现在了解得更多了,我应该使用不同的损失函数吗?您如何准确地确定只有72个正确的预测?当我将代码复制到stackoverflow时,这是人为错误。我的笔记本上没有写。
test_X = testdata.values[:, 1:4]
test_Y = testdata.values[:, 0]