簡體   English   中英

用 Python 計算 Keras 神經網絡的准確度

[英]Calculating the Accuracy of A Keras Neural Network in Python

我創建了一個 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)

您正在使用准確性作為指標。 准確度衡量與真實標簽匹配的預測標簽的比例。 准確性主要用於(據我所知)分類任務。 據我所知,當您預測連續結果變量時,准確性並不能真正解釋。

根據您的代碼,您似乎正在將神經網絡用於回歸問題(您正在預測一個連續變量)。 對於回歸問題度量,人們經常使用“均方誤差”、“均方根誤差”、“平均絕對誤差”、“R^2”等。

如果您對百分比差異感興趣,那么也許您可以嘗試使用keras loss ,“mean_absolute_percentage_error”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM