python随机森林模型简单股票涨跌预测
前言:
学了差不多10多天的入门机器学习,突然发现学好数学是多么的重要,以前上学时还觉得数学只要学会加减乘除就可以了,什么导数,回归方程都没什么用,这段时间真后悔死,看了好多模型原理推导,有好多的数学符号都不认识了,全部还给了老师,改天还得回家找下以前初中高中的数学书看看才行。感觉我一文科生学这些东西真的非常吃力,说不定哪天我秃头了就真的变强了,哈哈哈!n年后秃头的自己看到今天写的这篇文章会是什么样的心情,忍不住想象了下。每次都废话连篇,放出代码如下:
import numpy as np
import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt
from pylab import mpl
from datetime import datetime
import talib
from sklearn.ensemble import RandomForestClassifier #分类决策树模型
from sklearn.metrics import accuracy_score #预测准确度评分函数
import warnings
warnings.filterwarnings("ignore")#pd.set_option()就是pycharm输出控制显示的设置
pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)# 显示所有列
#pd.set_option('display.max_rows', None)# 显示所有行
pd.set_option('colheader_justify', 'centre')# 显示居中pro = ts.pro_api('要到tushare官网注册个账户然后将token复制到这里,可以的话请帮个忙用文章末我分享的链接注册,谢谢')
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题#1.数据准备
df = pro.daily(ts_code='002505.SZ', start_date='20200101', end_date='20200818')
df.set_index('trade_date', inplace=True) #设置date列为索引,覆盖原来索引,这个时候索引还是 object 类型,就是字符串类型。
df.index = pd.DatetimeIndex(df.index) #将object类型转化成 DateIndex 类型,pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。
df = df.sort_index(ascending=True) #将时间顺序升序,符合时间序列
print(df)
df['close-open'] = (df['close']-df['open'])/df['open']
df['high-low'] = (df['high']-df['low'])/df['low']
df['pre_close'] = df['close'].shift(1) #昨日收盘价
df['price_change'] = df['close']-df['pre_close']
df['p_change'] = (df['close']-df['pre_close'])/df['pre_close']*100
df['MA5'] = df['close'].rolling(5).mean()
df['MA10'] = df['close'].rolling(10).mean()
df.dropna(inplace=True)
df['RSI'] = talib.RSI(df['close'], timeperiod=12)
df['MOM'] = talib.MOM(df['close'], timeperiod=5)
df['EMA12'] = talib.EMA(df['close'], timeperiod=12)
df['EMA26'] = talib.EMA(df['close'], timeperiod=26)
df['MACD'], df['MACDsignal'], df['MACDhist'] = talib.MACD(df['close'], fastperiod=12, slowperiod=26, signalperiod=9)
df.dropna(inplace=True)#2.提取特征变量和目标变量,用当天收盘后获取完整的数据为特征变量,下一天的涨跌情况为目标变量这样来训练分类决策树模型
X = df[['close', 'vol', 'close-open', 'MA5', 'MA10', 'high-low', 'RSI', 'MOM', 'EMA12', 'EMA26', 'MACD', 'MACDsignal', 'MACDhist']]
y = np.where(df['price_change'].shift(-1)>0, 1, -1) #下一天股价涨,赋值1,下跌或平,赋值-1
#3设置训练集跟测试集
X_length = X.shape[0] #获取X的行数和列数,shape[0]为行数
split = int(X_length * 0.8)
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]#4设置模型
model = RandomForestClassifier(max_depth=4, n_estimators=10, min_samples_leaf=5, random_state=1)
model.fit(X_train, y_train)#5预测股价涨跌,根据X_test给出的'close', 'vol', 'close-open', 'MA5'等数据进行预测第二天股价的涨跌情况
y_pred = model.predict(X_test)
#print(y_pred)
a = pd.DataFrame()
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
print(a)#6预测属于各个分类的概率
y_pred_proba = model.predict_proba(X_test)
b = pd.DataFrame(y_pred_proba, columns=['分类为-1的概率', '分类为1的概率'])
print(b)#7整体模型的预测准确度
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print('准确率: ' + str(round(score*100, 2)) + '%')#8分析特征变量的特征重要性
features = X.columns
importances = model.feature_importances_
b = pd.DataFrame()
b['特征'] = features
b['特征重要性'] = importances
b = b.sort_values('特征重要性', ascending=False)
print(b)#参数调优
from sklearn.model_selection import GridSearchCV
parameters = {'n_estimators':[5, 10, 20], 'max_depth':[2, 3, 4, 5], 'min_samples_leaf':[5, 10, 20, 30]}
new_model = RandomForestClassifier(random_state=1)
grid_search = GridSearchCV(new_model, parameters, cv=6, scoring='accuracy')
grid_search.fit(X_train, y_train)
grid_search.best_params_
print('最优模型参数: ' + str(grid_search.best_params_))
tushare注册链接:link
python随机森林模型简单股票涨跌预测相关推荐
- python股票交易模型_python随机森林模型简单股票涨跌预测
import numpy as np import pandas as pd import tushare as ts import matplotlib.pyplot as plt from pyl ...
- Python使用随机森林模型进行电影评分预测
目录 数据处理 数据划分 数据建模 模型评估 结果预测 综合运用数据分析与数据挖掘课程中的数据探索.数据预处理.分析建模等理论知识,能够根据不同的业务的场景,选定不同的数据分析与数据挖掘模型,并能够通 ...
- kaggle项目:基于随机森林模型的心脏病患者预测分类!
公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 新年的第一个项目实践~给大家分享一个新的kaggle案例:基于随机森林模型(RandomForest)的心脏病人预测分类 ...
- 【信用评分预测模型(四)】Python随机森林模型
文章目录 前言 一.随机森林介绍 一.定义函数 二.模型建立 1.模型参数设置 2.模型训练集和测试集拆分 3.模型训练 4.特征值 总结 前言 在https://blog.csdn.net/m0_6 ...
- 使用增强回归树和随机森林模型进行溪流水质预测--文献阅读
流域特征和气候变量(例如地形.土壤.气候数据)也会影响河流水质.例如,陡坡可能会通过将污染物转移到溪流中来影响溪流水质,从而导致水质恶化.同样,土壤特性也会影响水质.例如,以母岩为主的流域显示出较低的 ...
- 机器学习预测股票收益(一)之随机森林模型
机器学习预测股票收益(一)之随机森林模型 前言 一.导入库和数据 二.处理数据以及计算特征变量 三.使用随机森林回归预测股票收益 1.构建训练集和测试集 2.查看预测结果 四.根据预测结果构建long ...
- python基于随机森林模型的预测概率和标签信息可视化ROC曲线
python基于随机森林模型的预测概率和标签信息可视化ROC曲线 目录 python基于随机森林模型的预测概率和标签信息可视化ROC曲线
- 原理+代码|深入浅出Python随机森林预测实战
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 寒梅最堪恨,长作去年花. 前言 组 ...
- python与算法社区_【Python算法】分类与预测——Python随机森林
[Python算法]分类与预测--Python随机森林 1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探 ...
最新文章
- Java并发:分布式应用限流 Redis + Lua 实践
- mysql常用字段及长度
- 循序渐进 OSPF的详细剖析(三)
- python常见问题
- SPARK:作业基本运行原理
- bp神经网络预测模型_【2020顶会KDD】AutoST:面向时空预测的高效神经网络学习模型...
- linux dd 硬盘 脚本,如何使用dd命令测试Linux磁盘的读写速度
- RabbitMQ中Confirm确认与Return返回消息详解(八)
- emerald sword(打倒大魔王)
- 李炎恢php学习视频教程下载
- 搜狗输入法 VS 拼音加加
- 用极致业务基础平台研发的族谱管理软件
- unity3d安装IOS Support失败原因,完美解决。
- 如何在web配置一个高效采集数据的DTM?
- 一个程序员的真实故事上
- win10插入耳机没声音,如何设置声音
- 原生JS实现点击按钮显示更多内容
- 修改MP4文件二进制内容,实现安卓Camera2旋转录制视频画面功能
- android照片编辑软件,美易照片编辑器下载
- 什么是数据库?数据库的作用想学数据库必看 (1)
热门文章
- Mesh Shading
- HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)
- 国家开发银行软件测试工资待遇,一名省直公务员告诉你绝对准确的国家开发银行员工收入,与省厅公务员作详细对比...
- java工程师面试题大全100%公司笔试题你都能碰到几个
- RP网页设计中的默认字体:{font: 12px/1.5 Tahoma, Helvetica, Arial, sans-serif;}
- 运行tomcat 时报错,提示无法找到相关的jar包 Publishing failed with multiple errors Error reading file
- 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
- 如何使用正则表达式?
- 3DTouch功能开发
- 提升嵌入式开发效率小技巧——开发环境配置