在这种情况下,如何计算人工神经网络的准确性



我正在运行以下代码。我想计算测试数据的ANN的准确性。我正在使用 Windows 平台,python 3.5

import numpy 
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
dataset=pd.read_csv('main.csv')
dataset=dataset.fillna(0)
X=dataset.iloc[:, 0:6].values
#X = X[numpy.logical_not(numpy.isnan(X))]
y=dataset.iloc[:, 6:8].values
#y = y[numpy.logical_not(numpy.isnan(y))]
#regr = LinearRegression()
#regr.fit(numpy.transpose(numpy.matrix(X)), numpy.transpose(numpy.matrix(y)))
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X,y, test_size=0.24,random_state=0)

创建模型

model = Sequential()
model.add(Dense(4, input_dim=6, kernel_initializer='normal', activation='relu'))
model.add(Dense(4, kernel_initializer='normal', activation='relu'))
model.add(Dense(2, kernel_initializer='normal'))

编译模型

model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, batch_size=5, epochs=5)
y_pred=model.predict(X_test)

现在,我想计算y_pred的准确性。任何帮助将不胜感激。上面的代码是不言自明的。我目前只使用 5 个纪元进行实验。

Keras 已经实现了准确性等指标,因此您只需将model.compile行更改为:

model.compile(loss='mean_squared_error', optimizer='adam',
              metrics = ["accuracy"])

然后,训练和验证准确性(在 [0, 1] 范围内(将在训练期间显示在进度条上,您也可以使用 model.evaluate 计算准确性,这将返回损失和指标元组(在本例中为准确性(。

除了建议使用keras.您可以使用scikit-learn计算精度,如下所示:

from sklearn.metrics import accuracy_score 
accuracy_score(y_test, y_pred)

有关详细信息,请查看文档:sklearn.metrics.accuracy_score

尽管从

狭义的技术意义上讲,已经提供的两个答案都是正确的,但您的问题存在一个更普遍的问题,它会影响它的本质:您是在回归还是分类环境中?

  • 如果您处于回归上下文中(如您的loss='mean_squared_error'和输出层中的线性激活所暗示的那样(,那么模型编译的简单增强

    model.compile(loss='mean_squared_error', optimizer='adam',
          metrics = ["accuracy"])
    

    正如马蒂亚斯所说,将提供准确性。然而,在回归设置中,准确性毫无意义;有关更多详细信息,请参阅此处的答案和讨论。

  • 如果您处于分类上下文中(正如您希望计算准确性所暗示的那样,这仅在分类中有意义(,那么您的损失函数不应该是 MSE,而是交叉熵,而且最后一层的激活不应该是线性的。

为了计算精度,我们可以使用model.evaluate函数

最新更新