Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 股票市场神经网络的Keras损失和精度表征_Python_Machine Learning_Keras_Neural Network_Quandl - Fatal编程技术网

Python 股票市场神经网络的Keras损失和精度表征

Python 股票市场神经网络的Keras损失和精度表征,python,machine-learning,keras,neural-network,quandl,Python,Machine Learning,Keras,Neural Network,Quandl,我最近尝试完成一个神经网络,以预测股票市场上个别股票价格的波动,使用Keras作为网络框架,并使用Quandl检索历史调整后的股票价格;在运行该程序时,我主要利用了单个教程中显示的程序范例和信息,链接如下所示: import tensorflow as tf import keras import numpy as np import quandl from sklearn.model_selection import train_test_split import matplotlib.pyp

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

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)

然而,本教程使用了“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>
对940个样本进行训练,对236个样本进行验证
纪元1/5
940/940[===============================================================1s 831us/阶跃-损耗:85.4464-acc:0.0000e+00-val\u损耗:76.7483-val\u acc:0.0000e+00
纪元2/5
940/940[============================================================-0s 51us/阶跃-损耗:65.6871-附件:0.0000e+00-val\u损耗:55.4325-val\u附件:0.0000e+00
纪元3/5
940/940[============================================================-0s52us/阶跃-损耗:43.3484-附件:0.0000e+00-val\u损耗:30.5538-val\u附件:0.0000e+00
纪元4/5
940/940[===================================================-0s 47us/阶跃-损耗:16.5076-附件:0.0011-val\u损耗:1.3096-val\u附件:0.0042
纪元5/5
940/940[======================================================-0s47us/步-损耗:2.0529-附件:0.0043-val_损耗:1.1567-val_附件:0.0000e+00

如果我在测试这些范例方面的经验相对较少,我更愿意知道这种准确性是否令人满意;损耗和精度参数是否表明模型运行良好?它们之间的差异是什么?人们如何解读它们?最后,Keras如何描述它们?模块的文件似乎没有提供足够的信息;然而,这可能是我对他们的检查造成的。谢谢您的帮助。

关于神经网络/ML,您可能会得到更好的答案,但我可以在这里帮助您

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

让我们首先从高层次概述这些指标:

Loss=模型的预测与您的数据“偏离”多远。

模型“正确”的预测准确率=%s;i、 e.如果您的模型是一个函数,则特定数据点的模型(x)=y。

令人满意的“准确性”是主观的,广泛取决于应用程序/模型/您的数据。然而,由于你试图预测股票价格;i、 e.一个连续变量,你在做回归,对我来说,使用类似于度量的精度没有多大意义。我可以通过你的问题公式告诉你正在做回归——线性激活也是一个强烈的暗示

为了解释为什么准确率没有意义,如果我是基于某些因素预测房价,我可能不在乎有多少预测是准确的,但更重要的是我的预测总体上有多接近。如果我的回归模型在每个房价上减去1美元,我的准确度仍然是0,但我仍然可能有一个好的模型

相反,最小化损失函数可能是更好的思考方式。这样想:总的来说,您希望拟合一些输入变量的函数,这些函数“接近”地面真实值输出。例如,损失函数是LMS(最小均方),它本质上是残差的平均平方距离。这里使用的是平均绝对误差,它只是差值的平均绝对值。这两种损失函数都有优点和缺点,我鼓励您在应用程序中研究这一点


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

我投票决定结束这一讨论,因为这显然是一个统计/机器学习问题,而不是编程问题,代码运行时没有任何错误或问题。