表征股票市场神经网络的 Keras 损失和准确性



我最近尝试完成一个神经网络来预测股票市场上个股价格的波动,利用Keras作为网络的框架,Quandl检索历史调整后的股票价格;在运行这个程序的过程中,我主要利用了程序范式和单一教程中显示的信息, 下面显示一个链接:

https://www.youtube.com/watch?v=EYnC4ACIt2g&t=2079s

但是,本教程使用了"sklearn"线性回归模块;我更改了程序以利用Keras,它具有更大的定制功能。程序如下所示:

import tensorflow as tf
import keras
import numpy as np
import quandl
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
df = quandl.get("WIKI/FB")
df = df[['Adj. Close']]
forecast_out = 1
df['Prediction'] = df[['Adj. Close']].shift(-(forecast_out))
X = np.array(df.drop(['Prediction'], 1))
X = X[:-forecast_out]
y = np.array(df['Prediction'])
y = y[:-forecast_out]
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2) 
model = keras.models.Sequential()
model.add(keras.layers.Dense(units = 64, activation = 'relu'))
model.add(keras.layers.Dense(units = 1, activation = 'linear'))
model.compile(loss='mean_absolute_error',
optimizer='adam',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split = 0.2)
x_forecast = np.array(df.drop(['Prediction'], 1))[-forecast_out:]
print(x_forecast)
prediction = model.predict(x_train)

但是,在通过 model.fit(( 命令使用提供的测试信息运行模型时,我收到了每个时期的损失和准确性的显示:

Train on 940 samples, validate on 236 samples
Epoch 1/5
940/940 [==============================] - 1s 831us/step - loss: 85.4464 - acc: 0.0000e+00 - val_loss: 76.7483 - val_acc: 0.0000e+00
Epoch 2/5
940/940 [==============================] - 0s 51us/step - loss: 65.6871 - acc: 0.0000e+00 - val_loss: 55.4325 - val_acc: 0.0000e+00
Epoch 3/5
940/940 [==============================] - 0s 52us/step - loss: 43.3484 - acc: 0.0000e+00 - val_loss: 30.5538 - val_acc: 0.0000e+00
Epoch 4/5
940/940 [==============================] - 0s 47us/step - loss: 16.5076 - acc: 0.0011 - val_loss: 1.3096 - val_acc: 0.0042
Epoch 5/5
940/940 [==============================] - 0s 47us/step - loss: 2.0529 - acc: 0.0043 - val_loss: 1.1567 - val_acc: 0.0000e+00
<keras.callbacks.History at 0x7ff1dfa19470>

鉴于我在测试此类范式方面相对较少的经验,我更想知道这种准确性是否令人满意;损失和准确性参数是否表明模型运行良好?它们之间有什么区别,如何阅读它们?最后,Keras如何描述它们?该单元的文件似乎没有提供足够数量的信息;但是,这可能是我对他们的审查。感谢您的协助。

你可能会在CrossValidated上得到关于神经网络/ML的更好答案,但我可以在这里尝试帮助你。

一般来说,很难判断神经网络是否"正常运行"——因此根据我的经验,ML 开发是一个非常迭代的过程,通过有根据的统计/数学猜测进行反复试验。

让我们先对指标进行高级概述:

Loss = how far "off" the model's prediction is from your data.

Accuracy = % of predictions that your model got "right"; i.e. if your model is a function, model(x) = y for a particular data point.

令人满意的"准确性"是主观的,在很大程度上取决于应用程序/模型/您的数据。但是,由于您正在尝试预测股票价格;即一个连续变量,你正在做回归,使用像准确性这样的指标对我来说没有多大意义。我可以告诉你,你的问题表述都在做回归——线性激活也是一个强烈的暗示。

要了解为什么准确性没有意义,如果我根据某些因素预测房价,我可能不在乎我得到了多少完全正确的预测,而是更关心我的预测总体上有多接近。如果我的回归模型对每个房价都减 1 美元,我仍然有 0 的准确率,但我可能仍然有一个好的模型。

相反,最小化损失函数可能是思考事物的更好方法。可以这样想:总的来说,你想要拟合输入变量的某个函数,这些函数"接近"于真实输出。对于线性回归,损失函数为 LMS(最小均方(,它本质上是残差的平均平方距离。这里使用平均绝对误差,它只是差值的平均绝对值。这两种损失函数都有优点和缺点,我鼓励您在应用程序中研究一下。

误差正在减小的事实是好的:这意味着模型近似的函数越来越接近训练数据(残差正在减少(。您的验证损失也不大于训练数据,这表明您也没有过度拟合数据。我鼓励你继续尝试。

最新更新