IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> python随机森林回归预测股票,收益率做标签,基本面因子做特征 -> 正文阅读

[数据结构与算法]python随机森林回归预测股票,收益率做标签,基本面因子做特征

从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)

(非常局部的)随机树结构为:
在这里插入图片描述
这就是目前写了基本功能的代码,还需改进。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:56:50  更:2021-08-18 12:57:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:46:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码