利用神经网络对股票进行预测

采用全连接神经网络,激活函数relu,损失函数为均方差。测试集的损失一直没有变化,出现过拟合。该怎么修改,求大神指导。

import numpy as np
import pandas as pd
from sklearn import preprocessing
import tensorflow as tf
import matplotlib.pyplot as plt
import os
dfdata = pd.read_csv('C:/Users/57888/Downloads/test1.csv')
'''slectedcols = [ 'pre_close', 'pre_settle', 'open', 'high',
       'low', 'close', 'settle', 'change1', 'change2', 'vol', 'amount', 'oi',
       'oi_chg']'''
slectedcols = ['open', 'high', 'low', 'close', 'pre_close',
       'change', 'pct_chg', 'vol', 'amount']
sledata1 = dfdata[slectedcols]#筛选对应值
sledata = sledata1.copy()
logdir = './logs'
chevkpointpath = './ckpt/Titanic.{epoch:02d}-{val_loss:.2f}.ckpt'
callbacks = [tf.keras.callbacks.TensorBoard(log_dir = logdir,histogram_freq = 2),
             tf.keras.callbacks.ModelCheckpoint(filepath = chevkpointpath,save_weights_only=True,verbose=1,period=5)]
ckptdir = os.path.dirname(chevkpointpath)
latest = tf.train.latest_checkpoint(ckptdir)


def predict(x,y):
    mod = tf.keras.models.Sequential()

    mod.add(tf.keras.layers.Dense(units=64,input_dim=9,use_bias=True,kernel_initializer='uniform',
                                  bias_initializer='zeros',activation='relu'))
    mod.add(tf.keras.layers.Dense(units=32, use_bias=True, kernel_initializer='uniform',
                                  bias_initializer='zeros', activation='relu'))
    mod.add(tf.keras.layers.Dropout(rate=0.3))#把一部分神经元在训练中舍弃防止过拟合
    mod.add(tf.keras.layers.Dense(units=1, use_bias=True, kernel_initializer='uniform',
                                  bias_initializer='zeros', activation='relu'))
    mod.compile(optimizer=tf.keras.optimizers.Adam(0.003),loss='mean_squared_error',metrics=['accuracy'])#模型设置优化器损失值
    #mod.load_weights(latest)
    #模型训练
    trainhistory = mod.fit(x=normfeatures,y=label,validation_split=0.2,epochs=100,batch_size=30,callbacks=callbacks,verbose=2)#verbose 训练过程显示模式
    # 0不显示1进度条2每epochs显示一行
    return trainhistory
def prepare_data(sledata):
    npdata = sledata.values  # 装换为np数组
    # 特征值
    features = npdata[:2371, :]
    # 第2列是标签
    label = npdata[1:, 0]

    minmax = preprocessing.MinMaxScaler(feature_range=(0, 1))
    normfeatures = minmax.fit_transform(features)
    return normfeatures, label
def visu(trainhistory,tm,vm ):
    plt.plot(trainhistory.history[tm] )
    plt.plot(trainhistory.history[vm])
    plt.title('训练历史')
    plt.ylabel(tm)
    plt.xlabel('epoch')
    plt.legend(['train','validation'],loc='upper left')
    plt.show()
if __name__ == '__main__':
    normfeatures,label = prepare_data(sledata)
    trainhistory  = predict(normfeatures,label)
    visu(trainhistory, 'loss', 'val_loss')``

训练损失与测试损失

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值