基于Keras的MLP_AutoEncoder模型

  • 什么是AutoEncoder
    • 上代码演示
      • MLP_AutoEncoder核心代码
      • 模型预测代码
      • 效果如何呢?
  • 结语

什么是AutoEncoder

举个栗子:大家应该或多或少都会看片儿吧,
看啥片儿我就不过多得问了,哈哈,我是不是说多了。
从模拟信号源转化为数字信号源是需要一套编码的,这就是Encoder编译器,
那么我们通过机器或者软件将编译好的片儿读取出来观看,
这个过程就是解码,解码的英文是Decoder。

咱们今天说得这套深度学习AutoEncoder模型也是同理,先将我们得数据进行加噪音浓缩处理,然后优化后再进行预测。
这里是作者给我们的逻辑图,第二幅是我找的一个图片:


这里是 Kaggle的Jane Street Market Prediction 代码的原文地址。

上代码演示

库导入有点儿离谱哈,凑合看吧。

#import packages
import pandas as pd
import numpy as np
import datetime as dt
import tushare as ts
token=【放入你的tushare密钥,记得加双引号】
pro = ts.pro_api(token)
#to plot within notebook
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#setting figure size
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 20,10
rcParams['font.sans-serif'] = ['SimHei']
rcParams['axes.unicode_minus']=False
# keras
from keras.layers import \Input, \BatchNormalization, \GaussianNoise, \Dense, \Activation, \Dropout, \Concatenate
from keras.models import Model
from keras.optimizers import Adam
from keras.losses import MeanSquaredError, BinaryCrossentropy
from keras.metrics import MeanAbsoluteError, AUC
from keras.callbacks import ReduceLROnPlateau #, ModelCheckpoint, Callback, EarlyStopping
# sklearn
from sklearn.preprocessing import MinMaxScaler
### KNN 和 LSTM 都会用到归一法,先提前预设好函数
scaler = MinMaxScaler(feature_range=(0, 1))

封装的一个获取数据的函数

# 股票或指数行情数据下载
# 你可以把常看的股票编辑放在这里
def get_raw_data():tickers = {'沪深300':'399300.SZ','上证':'000001.SH','诺德':'600110.SH','仁智':'002629.SZ','双良':'600481.SH','明阳':'601615.SH','鞍重':'002667.SZ','道森':'603800.SH','梅花':'600873.SH','新安':'600596.SH','隆基':'601012.SH',}code = tickers['诺德']if code.startswith('399'):_df = pro.index_daily(ts_code=code,start_date='20121231',end_date='')elif code == "000001.SH":_df = pro.index_daily(ts_code=code,start_date='20121231',end_date='')else:_df = pro.daily(ts_code=code, start_date='20121231', end_date='')return _df

清洗数据这一块我是从zhugby大佬这边获取的,有需要的朋友请自行去购买下载,不能做断人财路/侵犯他人权益的事儿。zhugby大佬的代码分享一共给大家展示了4种机器学习和深度学习的模型,我个人是觉得非常优秀的,让我收获颇丰。强烈建议大家去学习一下,而且也为我的数据准备打下了很夯实的基础。

MLP_AutoEncoder核心代码

def create_ae_mlp(num_columns,num_labels,hidden_units,dropout_rates,ls = 1e-2,lr = 1e-3):# 定义输入inputs = Input(shape = (num_columns, ))x0 = BatchNormalization()(inputs)# 高斯加噪noise_x0 = GaussianNoise(dropout_rates[0])(x0)# 编码器encoder = Dense(hidden_units[0])(noise_x0)encoder = BatchNormalization()(encoder)encoder = Activation('swish')(encoder)# 解码器decoder = Dropout(dropout_rates[1])(encoder)decoder = Dense(num_columns, name = 'decoder')(decoder)# Classification Layerx_ae = Dense(hidden_units[1])(decoder)x_ae = BatchNormalization()(x_ae)x_ae = Activation('swish')(x_ae)x_ae = Dropout(dropout_rates[2])(x_ae)# Autoencoder的分类器out_ae = Dense(num_labels,activation='sigmoid',name = 'ae_action')(x_ae)# 拼接原始输入和编码器输入x = Concatenate()([x0, encoder])# MLP的网络层x = BatchNormalization()(x)x = Dropout(dropout_rates[3])(x)for i in range(2, len(hidden_units)):x = Dense(hidden_units[i])(x)x = BatchNormalization()(x)x = Activation('swish')(x)x = Dropout(dropout_rates[i + 2])(x)# MLP的分类器out = Dense(num_labels, activation = 'sigmoid', name = 'action')(x)# 定义输入输出model = Model(inputs = inputs, outputs = [decoder, out_ae, out])# 定义优化器,损失函数和Metricsmodel.compile(optimizer = Adam(learning_rate = lr),loss = {'decoder': MeanSquaredError(),'ae_action': BinaryCrossentropy(label_smoothing = ls),'action': BinaryCrossentropy(label_smoothing = ls),},metrics = {'decoder': MeanAbsoluteError(name = 'MAE'),'ae_action': AUC(name = 'AUC'),'action': AUC(name = 'AUC'),},)return model

不得不说原作者“Mingjie Wang"的代码功力是真漂亮:工整,清晰,明确!具体的参数调整请大家自己学习修改,非常有趣!

模型预测代码

def prediction_AE():#creating train and test setsnew_data = new_data_0.copy()new_data.drop('trade_date', axis=1, inplace=True)dataset = new_data.valuesslice_ratio = 0.8slicer = (len(new_data) * slice_ratio).__int__()train_MLP = dataset[:slicer,:]valid_MLP = dataset[slicer:,:]#converting dataset into x_train and y_train 归一化scaled_data = scaler.fit_transform(dataset)x_train, y_train = [], []for i in range(60,len(train_MLP)):x_train.append(scaled_data[i-60:i,0])y_train.append(scaled_data[i,0])x_train, y_train = np.array(x_train), np.array(y_train)x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))### 参数可以自己去调整,如果你知道自己在干嘛,你大概是需要什么!MLP_params = {'num_columns': x_train.shape[1],'num_labels': 1,'hidden_units': [96, 96, 896, 448, 448, 256],'dropout_rates': [0.03528, 0.038425, 0.4241, 0.1043, 0.4923, 0.32, 0.2717, 0.438],'ls': 1e-2,'lr': 1e-3,}model = create_ae_mlp(**MLP_params)reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.9, patience=5, min_lr=0.000001, verbose=1)   # 磐创AI# 从图上分析来看,30次epoch似乎是一个比较理想的数值,看看batch_size多少更理想些吧。_history = model.fit(x_train, y_train, epochs=30, batch_size=8, verbose=1, callbacks=[reduce_lr])inputs = new_data[len(new_data) - len(valid_MLP) - 60:].valuesinputs = inputs.reshape(-1,1)inputs = scaler.transform(inputs)X_test = []for i in range(60,inputs.shape[0]):X_test.append(inputs[i-60:i,0])X_test = np.array(X_test)X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1))closing_price = model.predict(X_test)preds = scaler.inverse_transform(closing_price[1])rms=np.sqrt(np.mean(np.power((valid_MLP-preds),2)))return preds, rms, _historyhistory = prediction_AE()[2]
valid_0['Pre_MLP'] = prediction_AE()[0]
valid_0.tail()

效果如何呢?



也许是我的80%训练预测比例有点儿劲儿使狠了,从图上看:在诺德股份2021年冲高的那段拟合程度并不是很好,其实也说明了一点就是这一波市场的情绪还是比较激进的,锂电板块亦是如此。从过去的数据计算方式来看并没有能够预判出来。

结语

  1. 机器学习和深度学习(ML & DL)是非常好的金融量化工具,预测只是一方面,我们还可以用模型去优化我们的因子,测试因子的有效程度,这都是可以实现的,就看大家怎么去用这个好工具。
  2. 千万不要迷信这玩意儿,ML和DL模型更多的是用在金融以外的时间排序数据处理上,在金融领域上运用的并不是很理想,毕竟金融市场并不是什么一两个模型就能预判和左右的(尤其像咱们大A这种市场,都懂的)。
  3. 最后推一波我导师的博客。他是咱天朝暨南大学非常优秀的金融学博士,在金融领域很有建树。他在我的量化学习的道路上给予了非常大的帮助,包括但不限于理论/代码/书籍等方方面面的指导学习。

【手把手教你基于Keras的AutoEncoder模型拟合预测股票走势】相关推荐

  1. 【Keras】使用LSTM预测股票走势

    长短期记忆(LSTM) LSTM是一种循环神经网络(RNN),可学习时间步长序列和数据之间的长期依赖关系,与CNN不同,LSTM可以记住预测之间的网络状态. LSTM适用于序列和时序数据分类,此时必须 ...

  2. 手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客 (翻译:程思衍校对:付宇帅)

    手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客 手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客

  3. 手把手教你利用 python 爬虫分析基金、股票

    手把手教你利用 python 爬虫分析基金.股票 文章目录 手把手教你利用 python 爬虫分析基金.股票 第一步:基金数据爬取 第二步:股票增持计算 第三步:好股基金选取 桌面程序 exe 从前大 ...

  4. 【玩转华为云】手把手教你利用ModelArts实现人脸年龄预测

    本篇推文共计2000个字,阅读时间约3分钟. 华为云-华为公司倾力打造的云战略品牌,2011年成立,致力于为全球客户提供领先的公有云服务,包含弹性云服务器.云数据库.云安全等云计算服务,软件开发服务, ...

  5. python 时间序列prophet 模型分析_手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)...

    原标题:手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码) 作者:ANKIT CHOUDHARY:翻译:王雨桐:校对:丁楠雅: 本文约3000字,建议阅读12分钟. 本文将通过 ...

  6. R语言怎么比较两个模型C指数,手把手教你比较两个模型的预测能力

    原标题:手把手教你比较两个模型的预测能力 本文首发于"百味科研芝士"微信公众号,转载请注明:百味科研芝士,Focus科研人的百味需求. 各位科研芝士的朋友,大家好.最近学习到用NR ...

  7. DL之LSTM:基于《wonderland爱丽丝梦游仙境记》小说数据集利用LSTM算法(基于keras)对word实现预测

    DL之LSTM:基于<wonderland爱丽丝梦游仙境记>小说数据集利用LSTM算法(基于keras)对word实现预测 目录 基于<wonderland爱丽丝梦游仙境记>小 ...

  8. 保姆级教程:手把手教你使用 Keras 搭建神经网络

    大家好,本文从0到1详细讲解两种基于Keras的建模方法: 基于Sequential的建模:快速方便,易上手 基于函数式API的建模:易于扩展,灵活性强 文章目录 你会学到什么? 技术提升 导入内置数 ...

  9. 手把手教你学Python之波士顿房价预测(scikit-learn的应用)

    目录 1.波士顿房价预测介绍 2.线性回归算法 3.调用scikit-learn库实现房价预测 1.波士顿房价预测介绍 问题描述:波士顿房价数据集统计的是20世纪70年代中期波士顿郊区房价的中位数,统 ...

最新文章

  1. 初中参观机器人博物馆的作文_2021考研英语二大作文模板整理
  2. 未来,App 就是一个人的全部
  3. CV之NS之VGG16:基于TF Slim(VGG16)利用七个不同的预训练模型实现快速NS风格
  4. 剑指offer——25.合并两个排序的链表
  5. 决策树系列(一)——基础知识回顾与总结
  6. ORACLE系统表和视图
  7. 开发基于MFC的应用程序
  8. 【问题导向】GWR与MGWR——以南京市中心城区住宅小区为例
  9. 挖金矿问题java课程设计_某15万吨金矿采矿方法课程设计
  10. web图书销售管理系统_美萍手机销售WEB版销售管理系统整体解决方案服务商
  11. error C2065: “SHELLEXECUTEINFO”: 未声明的标识符
  12. 苹果电脑(Mac)如何进行大小写和中英文的切换
  13. 讯飞语音合成 如何选择发音人
  14. 权重衰减(weight decay)与学习率衰减(learning rate decay)
  15. baomidou 动态数据源
  16. abc F - Endless Walk
  17. 7个最佳博客名称生成器,可帮助您找到好的博客名称提示
  18. Postman是什么 怎么用
  19. 浅谈工作流技术及其应用
  20. 二手车电商风波:改革路上,请给予一定的容错空间

热门文章

  1. 913大数据综合复试内容
  2. 在逸管家共享经济时代我们应该分享什么?
  3. CSS案例 • 【第7章 横幅广告滑块】
  4. 【转】使用Midjourney绘制小漫画
  5. 如何找到自己的python位置_安装 - 如何找到Python site-packages目录的位置?
  6. wooyun-2014-065513
  7. SOLIDWORKS软件和3D打印给行业带来的变化
  8. iTextSharp页脚使用,添加横线
  9. Anki 显示字段 html 代码
  10. 全球与中国酒精含量测量仪市场深度研究分析报