python - 用 Python 计算 Keras 神经网络的准确度
问题描述
我创建了一个 Keras 神经网络。神经网络在八个 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)
感谢您就这一特定问题提供的帮助。
解决方案
我的理解是,您想在“训练”神经网络时打印出预测百分比的变化。如果是这样,请执行以下操作:
我用来计算偏离真实值百分比的逻辑是:
percent_deviance = 100 * |true - predicted| / predicted
import keras.backend as K
import numpy as np
def variation_percentage(y_pred,y_true):
deviation = np.subtract(y_pred - y_true)
scaled_deviance = np.divide(deviation,y_true) # element-wise divide
percent_deviance = np.absolute(scaled_deviance) * 100
return K.mean(percent_deviance) # returns mean percent of deviance from original value
然后在您model.compile
将其更改为:
model.compile(loss='mean_absolute_error',
optimizer='adam',
metrics=['accuracy', variation_percentage])
无论如何,我希望你明白这个逻辑。
推荐阅读
- python - 尝试使用 python、flask 和 mongodb 预填充下拉菜单
- git - 撤消对远程存储库的更改
- reactjs - react 有标记绑定语法吗?
- django - 无效的 HTTP_HOST 标头:“127.0.0.1:8000”。您可能需要将“127.0.0.1”添加到 ALLOWED_HOSTS
- python - 具有嵌入式和浮点输入的 Keras GRU
- notepad++ - 在记事本++中的不同行中添加或减去值
- javascript - 如何在 laravel livewire 中应用谷歌地图 api
- python - 计算两个特定列具有相同、特定值、输出行数的数据帧行数
- java - Java 中的一个简单的 3x3 骰子游戏
- reactjs - 如何使用 rollupjs 创建具有不同目录的 npm 包