请选择 进入手机版 | 继续访问电脑版
楼主: lzzmz
6145 7

【财务选股】在LSTM神经网络Keras实践中一些报错的处理分享 [推广有奖]

  • 1关注
  • 3粉丝

博士生

26%

还不是VIP/贵宾

-

威望
0
论坛币
25 个
通用积分
86.8500
学术水平
1 点
热心指数
0 点
信用等级
0 点
经验
64335 点
帖子
11
精华
0
在线时间
513 小时
注册时间
2014-12-30
最后登录
2023-5-18

lzzmz 在职认证  发表于 2018-9-15 23:29:17 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

最近用LSTM神经网络做了一下财务选股,因为处理的是三维数据,也即面板数据,在网上有的报错没有直接的处理办法,对中间出现的报错,有一些自己的理解,如果不对,还希望指正。


分享一下处理经验:
1.
一个是shape()、reshape()函数的问题,经常会有:
ValueError:cannot reshape array of size 220110 into <870,7,36>

这其实是对这两个函数的理解问题,文档里说的比较不好理解,通俗一点就是shape(a,b,c)、reshape(a,b,c)
其实就是reshape(样本多少个,每个样本中有几组变量的个数,每个变量中又有几个多少分支)
reshape(870只股票,7年,每年36个变量)

shape函数同上

这样只要调节870*7*36和size 数值相等即可

2.
ValueError: Input 0 is incompatible with layer lstm_3 :expected ndim=3 , found ndim=2
这个问题是对LSTM的原理不够理解,LSTM处理的是三维数据变量,你要是输入一个矩阵那是不对的。换句话说,要求的是面板数据,输入的却是截面数据。那有一个维度上没有数据,那一定处理不了。
因此输入的结构从(7,36)改为(870,7,36)即可

3.
ValueError:  Error when checking target  : expected dense_1 to have 3 dimensions , but got array with shape <75,1>
这个问题说的其实还是三维的输入需求,只输入了二维,要把二维数据转换为三维的。转换代码我会附在后边


4.
ValueError:  Error when checking target  : expected dense_1 to have shape <1, > , but got array with shape <7, >
这个问题,其实是一个dense层只能处理一个向量,或者说一个年份的数据。但现在输入了7个,因为是7年的预测结果,因此,把dense层的神经元数量由1个改为7个就能够装得下7个输入了

因为excel导入的数据都是pandas的二维,所以要将其先转换为numpy然后再转为3为pandas的pannels数据
下面是二维转三维的输入代码:

输入excel数据时的转换:
inputfile = 'D:\input.xls'
data = pd.read_excel(inputfile) #读取数据

data_train0 = data.copy() #复制一下数据建模
data_train1=data_train0.values
data_train=data_train1.reshape(870,7,36)

x_train = data_train #特征数据

导出excel数据时的转换
三维转二维,转为dataframe
datap0是上边data_train经过运算后的三维数据,数据结构和data_train一致,即(870,7,36)
datap1=datap0.reshape(870,7)
datap2=np.array(datap1)
datap=pd.DataFrame(datap2)

datap.to_excel('D:\prey.xls')



最后,附上选出的股票预测图,因为没有wind等强大的数据库,在Choice上选了一些能反映企业运行状况的指标,做出了模型,将做出的模型,应用在沪深300池和上证50池中,选出前十,不换股票,只是维持10%比例,然后用等比例资金配置,简单跑一下回测,就是简单的买入持有策略,得到的效果还是跑赢了上证指数的
沪深300池中
004l4JiFzy7nE7GNf6K96&690.jpg



上证50池中


QQ浏览器截图20180915232543.jpg


这结果说明什么问题,大家自己思考吧


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:神经网络 神经网 STM Era RAS

已有 2 人评分经验 学术水平 收起 理由
changjiang11 + 1 精彩帖子
np84 + 100 精彩帖子

总评分: 经验 + 100  学术水平 + 1   查看全部评分

foozhencheng 学生认证  发表于 2018-9-16 00:07:13 来自手机 |显示全部楼层 |坛友微信交流群
lzzmz 发表于 2018-9-15 23:29
最近用LSTM神经网络做了一下财务选股,因为处理的是三维数据,也即面板数据,在网上有的报错没有直接的处理 ...
题主的loss用的是什么?training用SGD?输入的面板数据是什么?

使用道具

foozhencheng 学生认证  发表于 2018-9-16 00:08:07 来自手机 |显示全部楼层 |坛友微信交流群
lzzmz 发表于 2018-9-15 23:29
最近用LSTM神经网络做了一下财务选股,因为处理的是三维数据,也即面板数据,在网上有的报错没有直接的处理 ...
以及换仓频率?月度?周度?交易手续费设置的是多少?

使用道具

lzzmz 在职认证  发表于 2018-9-16 00:40:26 |显示全部楼层 |坛友微信交流群
具体就是这样的loss='mean_squared_error',
optimizer = 'adam'
换仓?不换的,就是买入持有,视资金量一直加仓并维持10只股票的10%资金占比;费用万八。都是米筐原始设置

数据就是财务指标,自己从财报提取的。

使用道具

邂逅阑珊 发表于 2018-11-1 10:58:35 |显示全部楼层 |坛友微信交流群
lzzmz 发表于 2018-9-16 00:40
具体就是这样的loss='mean_squared_error',
optimizer = 'adam'
换仓?不换的,就是买入持有,视资金量一 ...
楼主,请问最初的excel表格中的数据是长什么样的?我整理了一些面板数据,在excel中的数据的格式是stata处理面板的格式,第一列是公司id,第二列是年份,后面的列是各个财务指标,请问这样能做吗,还是弄成其他的?

使用道具

lzzmz 在职认证  发表于 2018-11-2 21:29:06 |显示全部楼层 |坛友微信交流群
lzzmz 发表于 2018-9-16 00:40
具体就是这样的loss='mean_squared_error',
optimizer = 'adam'
换仓?不换的,就是买入持有,视资金量一 ...
纵轴是公司id
横轴为:比如说2年,3个变量,2010年毛利率,2010年存货周转率,2010年每股收益,2011年毛利率,2011年存货周转率,2011年每股收益
以此类推
那么要用reshape转为三维的就是
(股票个数,2,3)

使用道具

zalzi 发表于 2018-12-24 21:08:19 |显示全部楼层 |坛友微信交流群
楼主,请问 model<-keras_model_sequential()
Error: file name conversion problem -- name too long?
这个报错是为什么呢?

使用道具

lzzmz 在职认证  发表于 2019-1-1 19:12:59 |显示全部楼层 |坛友微信交流群
zalzi 发表于 2018-12-24 21:08
楼主,请问 model
这个报错我没有遇到过,应该是说文件名的问题吧

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 07:11