Расчет точности нейронной сети A Keras в Python - PullRequest
0 голосов
/ 30 января 2020

Я создал нейронную сеть Keras. Нейронная сеть была обучена в течение восьми эпох, и она выводит это значение и точность потерь:

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)

1 Ответ

0 голосов
/ 30 января 2020

Вы используете точность как метрику c. Точность измеряет долю предсказанных меток, которые соответствуют истинным меткам. Точность используется в основном (насколько мне известно) для задач классификации. Насколько я знаю, точность не совсем понятна, когда вы прогнозируете непрерывную переменную результата.

Исходя из вашего кода, похоже, что вы используете нейронную сеть для решения проблемы регрессии (вы предсказываете непрерывную переменную). Для измерения проблем регрессии люди часто используют «среднеквадратическую ошибку», «root среднеквадратическую ошибку», «среднюю абсолютную ошибку», «R ^ 2» и т. Д. c.

Если вас интересуют процентные различия, возможно, вы можете попробовать keras loss , "mean_absolute_percentage_error".

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