• 股票价格预测


    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
    想系统/深入学习某技术知识点…
    一个人摸索学习很难坚持,想组团高效学习…
    想写博客但无从下手,急需写作干货注入能量…
    热爱写作,愿意让自己成为更好的人…

    创作计划

    **
    1,机缘

    A,股票价格预测项目中的经验分享
    B,平时学习过程中的经验记录
    C,通过股票价格预测与相关作者进行技术交流

    2,收获

    A,获得了10粉丝的关注
    B,获得了20正向的赞、阅读量等
    C,认识了学习RNN的技术同行

    3,日常

    1. 创作已经是我学习的一部分了
    2. 有限的时间下,周二、周四、周六进行创作,其余时间学习

    4,憧憬

    创作规划是学习RNN原理,使用RNN模型模拟股票价格输出

    **

    学习计划

    **
    1,学习目标

    掌握 RNN入门知识

    2,学习内容

    A,掌握误差估计方法
    B,学习RNN基本原理
    C,划分数据集

    3,学习时间

    周一至周五晚上 7 点—晚上9点
    周六下午 6 点-下午 9 点
    周日下午 6 点-下午 9 点

    4,学习产出

    技术笔记 10 篇
    CSDN技术博客 3 篇
    学习的vlog 视频 1 个

    **

    学习日记

    **
    1,学习知识点

    RNN的结构,模型构建方法

    2,学习遇到的问题

    数据集的划分、模型的设计

    3,学习的收获

    学会了RNN模型的构建

    4,实操

    import os,math
    from tensorflow.keras.layers import Dropout, Dense, SimpleRNN
    from sklearn.preprocessing   import MinMaxScaler
    from sklearn                 import metrics
    import numpy as np
    import pandas as pd
    import tensorflow as tf
    import matplotlib.pyplot as plt
    # 支持中文
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    data = pd.read_csv('D:/BaiduNetdiskDownload/SH600519.csv')  # 读取股票文件
    #print(data)
    #取出第三列
    training_set = data.iloc[0:2426 - 300, 2:3].values
    test_set = data.iloc[2426 - 300:, 2:3].values
    #归一化
    sc= MinMaxScaler(feature_range=(0, 1))
    training_set = sc.fit_transform(training_set)
    test_set= sc.transform(test_set)
    #设置测试集、训练集
    x_train = []
    y_train = []
    
    x_test = []
    y_test = []
    
    """
    使用前60天的开盘价作为输入特征x_train
        第61天的开盘价作为输入标签y_train
    
    for循环共构建2426-300-60=2066组训练数据。
           共构建300-60=260组测试数据
    """
    for i in range(60, len(training_set)):
        x_train.append(training_set[i - 60:i, 0])
        y_train.append(training_set[i, 0])
    
    for i in range(60, len(test_set)):
        x_test.append(test_set[i - 60:i, 0])
        y_test.append(test_set[i, 0])
    
    # 对训练集进行打乱
    np.random.seed(7)
    np.random.shuffle(x_train)
    np.random.seed(7)
    np.random.shuffle(y_train)
    tf.random.set_seed(7)
    #将训练数据调整为数组(array)
    x_train, y_train = np.array(x_train), np.array(y_train)
    x_test,  y_test  = np.array(x_test),  np.array(y_test)
    x_train = np.reshape(x_train, (x_train.shape[0], 60, 1))
    x_test  = np.reshape(x_test,  (x_test.shape[0], 60, 1))
    
    model = tf.keras.Sequential([
        SimpleRNN(100, return_sequences=True), #布尔值。是返回输出序列中的最后一个输出,还是全部序列。
        Dropout(0.1),                         #防止过拟合
        SimpleRNN(100),
        Dropout(0.1),
        Dense(1)
    ])
    # 该应用只观测loss数值,不观测准确率,所以删去metrics选项,一会在每个epoch迭代显示时只显示loss值
    model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
                  loss='mean_squared_error')  # 损失函数用均方误差
    history = model.fit(x_train, y_train,
                        batch_size=64,
                        epochs=20,
                        validation_data=(x_test, y_test),
                        validation_freq=1)                  #测试的epoch间隔数
    
    model.summary()
    plt.plot(history.history['loss']    , label='Training Loss')
    plt.plot(history.history['val_loss'], label='Validation Loss')
    plt.title('Training and Validation Loss by K同学啊')
    plt.legend()
    plt.show()
    ##预测
    predicted_stock_price = model.predict(x_test)                       # 测试集输入模型进行预测
    predicted_stock_price = sc.inverse_transform(predicted_stock_price) # 对预测数据还原---从(0,1)反归一化到原始范围
    real_stock_price = sc.inverse_transform(test_set[60:])              # 对真实数据还原---从(0,1)反归一化到原始范围
    
    # 画出真实数据和预测数据的对比曲线
    plt.plot(real_stock_price, color='red', label='Stock Price')
    plt.plot(predicted_stock_price, color='blue', label='Predicted Stock Price')
    plt.title('Stock Price Prediction by K同学啊')
    plt.xlabel('Time')
    plt.ylabel('Stock Price')
    plt.legend()
    plt.show()
    #评估
    MSE   = metrics.mean_squared_error(predicted_stock_price, real_stock_price)
    RMSE  = metrics.mean_squared_error(predicted_stock_price, real_stock_price)**0.5
    MAE   = metrics.mean_absolute_error(predicted_stock_price, real_stock_price)
    R2    = metrics.r2_score(predicted_stock_price, real_stock_price)
    
    print('均方误差: %.5f' % MSE)
    print('均方根误差: %.5f' % RMSE)
    print('平均绝对误差: %.5f' % MAE)
    print('R2: %.5f' % R2)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101

    输出:在这里插入图片描述
    在这里插入图片描述
    均方误差: 2832.55388
    均方根误差: 53.22174
    平均绝对误差: 46.33845
    R2: 0.59098

    分析:可以看出训练集和测试集差别较小,没有产生过拟合。使用该模型预测准确率也较吻合。产生的误差较小。

  • 相关阅读:
    【零分配的 JSON 日志记录器】高性能日志框架——ZeroLog
    基础设施SIG月度动态:「龙蜥大讲堂」基础设施系列专题分享完美收官,容器镜像构建 2.0 版本上线
    神经网络 深度神经网络,深度神经网络工作原理
    (历史上最详细的网络)华为初级网络工程师知识点总结(二)工作考研均受益
    Java项目:SSM婚纱影楼摄影商城项目网站
    MySQL的日志管理、备份和恢复
    室内定位UWB在化工园区如何智能化管理
    算法(一)
    C语言学习书籍(提高篇)
    C语言基础--数组
  • 原文地址:https://blog.csdn.net/misterfm/article/details/126225598