【问题标题】:Calculating the Accuracy of A Keras Neural Network in Python用 Python 计算 Keras 神经网络的准确度
【发布时间】:2020-05-15 12:38:07
【问题描述】:

我创建了一个 Keras 神经网络。神经网络经过 8 个 epoch 的训练,输出了这个损失值和准确率:

Epoch 1/8
2009/2009 [==============================] - 0s 177us/step - loss: 0.0824 - acc: 4.9776e-04
Epoch 2/8
2009/2009 [==============================] - 0s 34us/step - loss: 0.0080 - acc: 4.9776e-04
Epoch 3/8
2009/2009 [==============================] - 0s 37us/step - loss: 0.0071 - acc: 4.9776e-04
Epoch 4/8
2009/2009 [==============================] - 0s 38us/step - loss: 0.0071 - acc: 4.9776e-04
Epoch 5/8
2009/2009 [==============================] - 0s 35us/step - loss: 0.0070 - acc: 4.9776e-04
Epoch 6/8
2009/2009 [==============================] - 0s 38us/step - loss: 0.0071 - acc: 4.9776e-04
Epoch 7/8
2009/2009 [==============================] - 0s 36us/step - loss: 0.0068 - acc: 4.9776e-04
Epoch 8/8
2009/2009 [==============================] - 0s 40us/step - loss: 0.0070 - acc: 4.9776e-04

如何解释输出中提供的损失函数? 有什么方法可以找到数据集中每一天的实际价格和预测之间的变化百分比吗?

这是神经网络:

import tensorflow as tf
import keras
import numpy as np
#import quandle
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
import sklearn
import math
import pandas_datareader as web

def func_stock_prediction(stockdata, start, end):
  start = start
  end = end
  df = web.DataReader(stockdata, "yahoo", start, end)
  df = df[['Close']]


  previous = 5


  def create_dataset(df, previous):
      dataX, dataY = [], []
      for i in range(len(df)-previous-1):
          a = df[i:(i+previous), 0]
          dataX.append(a)
          dataY.append(df[i + previous, 0])
      return np.array(dataX), np.array(dataY)

  scaler = sklearn.preprocessing.MinMaxScaler(feature_range = (0, 1))
  df = scaler.fit_transform(df)


  train_size = math.ceil(len(df) * 0.5)

  train, val = df[0:train_size,:], df[train_size:len(df),:]

  X_train, Y_train = create_dataset(train, previous)


  print(X_train)
  print(Y_train)

  print(X_train.shape)
  print(Y_train.shape)

  X_val, Y_val = create_dataset(val, previous)

  X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
  X_val = np.reshape(X_val, (X_val.shape[0], 1, X_val.shape[1]))

  model = keras.models.Sequential() 
  model.add(keras.layers.Dense(units = 64, activation = 'relu', input_shape = (1, 5)))
  model.add(keras.layers.Flatten())
  model.add(keras.layers.Dense(units = 1, activation = 'linear'))
  model.compile(loss='mean_absolute_error', 
                optimizer='adam', 
                metrics=['accuracy'])

  history = model.fit(X_train, Y_train, epochs=8)

  train = model.predict(X_train)
  val = model.predict(X_val)

  train = scaler.inverse_transform(train)
  Y_train = scaler.inverse_transform([Y_train])
  val = scaler.inverse_transform(val)
  Y_val = scaler.inverse_transform([Y_val])
  predictions = val


  trainPlot = np.empty_like(df)
  trainPlot[:, :] = np.nan
  trainPlot[previous:len(train)+previous, :] = train
  valPlot = np.empty_like(df)
  valPlot[:, :] = np.nan
  valPlot[len(train)+(previous*2)+1:len(df)-1, :] = val
  inversetransform, =plt.plot(scaler.inverse_transform(df))
  train, =plt.plot(trainPlot)
  val, =plt.plot(valPlot)
  plt.xlabel('Number of Days')
  plt.ylabel('Stock Price')
  plt.title("Predicted vs. Actual Stock Price Per Day")
  plt.show()

func_stock_prediction("PLAY", 2010-1-1, 2020-1-1)

【问题讨论】:

标签: python machine-learning keras neural-network finance


【解决方案1】:

您正在使用准确性作为衡量标准。准确性衡量与真实标签匹配的预测标签的比例。准确性主要用于(据我所知)分类任务。据我所知,当您预测一个连续的结果变量时,准确性并不能真正解释。

根据您的代码,您似乎正在使用神经网络解决回归问题(您正在预测一个连续变量)。对于回归问题计量学,人们经常使用“均方误差”、“均方根误差”、“平均绝对误差”、“R^2”等。

如果您对百分比差异感兴趣,那么也许您可以尝试keras loss,“mean_absolute_percentage_error”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2018-10-19
    • 2017-07-05
    • 2018-04-23
    • 2017-08-31
    • 2019-10-12
    相关资源
    最近更新 更多