从BP神经网络训练模型后,想着换个模型训练训练数据集,于是在SVM和随机森林中选择,最后选择了随机森林。随机森林的原理不在这里做详细解释,有大佬比我讲的要好太多。我仅仅是就这我的代码做一些解释。

导入这次代码所需要的库

import numpy as np
import pandas as pd
import math
import matplotlib.pyplot as plt
import datetime as dt
import sklearn.model_selection as sm
from sklearn.ensemble import RandomForestRegressor
from sklearn.tree import export_graphviz
import pydot
from sklearn.preprocessing import MinMaxScaler

对数据做处理,选择的数据集为上证指数2016年到2021年7月30日日线的数据,csv文件可以从baostock上,通过python直接获取。

random_len=10#随机数种子的数量
est_tree=100#随机森林中树的个数
train_rate=0.7#切分训练组的长度
df=pd.read_csv("F:\大创(k线)\数据//999999.csv")
features=df.filter(['index','open','close','high','low'])
n_f=df.filter(['volume'])
n_f=n_f.values
n_f1=df.filter(['amount'])
n_f1=n_f1.values
scaler=MinMaxScaler(feature_range=(1000,10000))#保持成交量和成交额在同一数量级
n_f,n_f1=scaler.fit_transform(n_f),scaler.fit_transform(n_f1)
features['volume']=n_f
features['amount']=n_f1
features['pro_rate']=np.log(features['close'] / features['close'].shift(1))#计算收益率
features=features.replace(np.nan,0)#由于计算收益率时第一行数据没有值,把他变成0
train_data_len=math.floor(len(features)*train_rate)
newdate=features['index']
x_date=newdate[train_data_len:]

数据集准备成这样

给标签和特征区分数据集,通过定义函数

#准备好标签和特征组
def label_data(features):labels=np.array(features['pro_rate'])features=features.drop('pro_rate',axis=1)#从特征值中去除标签列features=features.drop('index',axis=1)feature_list=list(features.columns)features=np.array(features)return labels,feature_list,features
labels,feature_list,features=label_data(features)

设置随机森林的参数和训练模型,预测

rf=RandomForestRegressor(n_estimators=est_tree,random_state=random_len)
rf.fit(train_features,train_labels)
predtion=rf.predict(test_features)

数据可视化

fig,axs=plt.subplots(2,1,sharex=True,figsize=(14,8))
axs[0].plot(x_date,predtion)
axs[0].set_ylabel("prediction")
axs[1].plot(x_date,test_labels)
axs[1].set_ylabel("true")
plt.subplots_adjust(hspace=0)
plt.xlabel('date')
plt.show()
plt.close()

这里画出的图共享了x轴,这样看起来舒服一点

既然有了森林,我们当然要查看一下因子的重要程度

importances=list(rf.feature_importances_)
feature_importances = [(feature, round(importance, 4)) for feature, importance in zip(feature_list, importances)]
feature_importances = sorted(feature_importances, key = lambda x: x[1], reverse = True)
for pair in feature_importances:print('Variable: {:20} Importance: {}'.format(*pair))

得到的如下:

有时我们也需要看一下随机树的内部结构
我们所需要的库为

from sklearn.tree import export_graphviz
import pydot

值得注意的是graphviz不能在python中通过pip install graphviz命令行去安装到路径中,我们需要去网站下载安装
https://graphviz.org/download/#source-code
下载这个就好:
下载后安装,记得勾选把其加入到path中,或者之后自己把源文件下bin文件夹加入环境变量也行
如果在运行是报错:"dot" not found in path
则打开pydot.py文件,把这里的dot改成dot.exe

改完之后一定一定要记得重启电脑!!,我翻来覆去查了半小时哪里的问题。

现在就可以输出随机树的结构了

def draw_tree(rf,feature_list):tree = rf.estimators_[5]export_graphviz(tree, out_file = 'rf.dot', feature_names = feature_list, rounded = True, precision = 1)(graph, ) = pydot.graph_from_dot_file('rf.dot')graph.write_png('rf.png');
draw_tree(rf,feature_list)

(非常局部的)随机树结构为:

这就是目前写了基本功能的代码,还需改进。

python随机森林回归预测股票,收益率做标签,基本面因子做特征相关推荐

  1. 采用支持向量回归(SVR)和随机森林回归预测两种机器学习方法对房价进行预测(附完整代码)

    大家好,我是带我去滑雪,每天教你一个小技巧! 本文分别采用支持向量回归(SVR)和随机森林回归预测两种机器学习方法对房价进行预测.随机将数据分为训练集和测试集,比例为8:2,数据和代码均在文末. 1. ...

  2. python实现对森林生物量进行随机森林回归预测

    使用随机森林回归预测森林生物量(python) 随机森林算法的基本思想是基于多颗决策树的集成学习过程,使用场景广泛,一般的分类回归问题都可以使用.我们以光学影像为例,来估测森林生物量. 建立回归关系需 ...

  3. python随机森林变量重要性_推荐 :一文读懂随机森林的解释和实现(附python代码)...

    原标题:推荐 :一文读懂随机森林的解释和实现(附python代码) 作者:WilliamKoehrsen:翻译:和中华:校对:李润嘉 本文约6000字,建议阅读15分钟. 本文从单棵决策树讲起,然后逐 ...

  4. python 随机森林调参_Python机器学习实践:随机森林算法训练及调参-附代码

    原标题:Python机器学习实践:随机森林算法训练及调参-附代码 文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 博客园 作者 | 战争热诚 ...

  5. Python 随机森林特征重要度

    Python 随机森林特征重要度 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 随机森林特征重要度简介 决策树的优点是通过树 ...

  6. Python 随机森林分类

    Python 随机森林分类 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 决策树分类简介 相关概念见下: 决策树的最大问题是 ...

  7. r语言随机森林回归预测_从零实现回归随机森林

    一.前言 回归随机森林作为一种机器学习和数据分析领域常用且有效的算法,对其原理和代码实现过程的掌握是非常有必要的.为此,本文将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理 ...

  8. python随机森林筛选变量_用随机森林分类器和GBDT进行特征筛选

    一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...

  9. python与算法社区_【Python算法】分类与预测——Python随机森林

    [Python算法]分类与预测--Python随机森林 1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探 ...

最新文章

  1. Android 关于::app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE,引用jar冲突问题...
  2. 我以为的周末 vs 实际上的周末
  3. C语言经典例96-计算字符串中子串出现的次数
  4. Maven的简单配置说明
  5. Walle 瓦力 web部署系统
  6. 现代软件工程 结对/团队作业 - 汉字的 2048 + 俄罗斯方块
  7. SpringBoot 整合 Shiro实践
  8. DB2常用错误代码大全
  9. C#处理控制台关闭事件
  10. C++之priority_queue
  11. 重装系统后如何配置网络
  12. git submodule详解
  13. 访谈录#1:成为“温赵轮”
  14. windows7 系统中,IE打开网页窗口提示网页上有错误“无法打开匿名级安全令牌”解决方法
  15. webview无法播放视频
  16. 安卓小游戏:小板弹球
  17. 小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解
  18. 软件测试的原则有哪些?来自十年测试老鸟的总结
  19. Android studio ndk目录无法点击选择
  20. ios学习之旅--多态与点语法

热门文章

  1. PCB Layout爬电距离、电气间隙的确定
  2. python基本数据类型1
  3. Flutter | 和小老弟一起学资源管理
  4. 我的四核Cortex-A53学习之路
  5. 【Bison学习笔记】1:生成简易的语法分析程序,使Bsion和Flex协同工作
  6. 网易免费企业邮箱Foxmail设置方法
  7. 《A Survey on Transfer Learning》中文版翻译《迁移学习研究综述》
  8. 使用canvas画折线图和曲线图
  9. 云渲染是什么?云渲染好处以及安装方法。
  10. HRSC2016舰船检测训练实验过程记录