前言
学了差不多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随机森林模型简单股票涨跌预测相关推荐

  1. python股票交易模型_python随机森林模型简单股票涨跌预测

    import numpy as np import pandas as pd import tushare as ts import matplotlib.pyplot as plt from pyl ...

  2. Python使用随机森林模型进行电影评分预测

    目录 数据处理 数据划分 数据建模 模型评估 结果预测 综合运用数据分析与数据挖掘课程中的数据探索.数据预处理.分析建模等理论知识,能够根据不同的业务的场景,选定不同的数据分析与数据挖掘模型,并能够通 ...

  3. kaggle项目:基于随机森林模型的心脏病患者预测分类!

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 新年的第一个项目实践~给大家分享一个新的kaggle案例:基于随机森林模型(RandomForest)的心脏病人预测分类 ...

  4. 【信用评分预测模型(四)】Python随机森林模型

    文章目录 前言 一.随机森林介绍 一.定义函数 二.模型建立 1.模型参数设置 2.模型训练集和测试集拆分 3.模型训练 4.特征值 总结 前言 在https://blog.csdn.net/m0_6 ...

  5. 使用增强回归树和随机森林模型进行溪流水质预测--文献阅读

    流域特征和气候变量(例如地形.土壤.气候数据)也会影响河流水质.例如,陡坡可能会通过将污染物转移到溪流中来影响溪流水质,从而导致水质恶化.同样,土壤特性也会影响水质.例如,以母岩为主的流域显示出较低的 ...

  6. 机器学习预测股票收益(一)之随机森林模型

    机器学习预测股票收益(一)之随机森林模型 前言 一.导入库和数据 二.处理数据以及计算特征变量 三.使用随机森林回归预测股票收益 1.构建训练集和测试集 2.查看预测结果 四.根据预测结果构建long ...

  7. python基于随机森林模型的预测概率和标签信息可视化ROC曲线

    python基于随机森林模型的预测概率和标签信息可视化ROC曲线 目录 python基于随机森林模型的预测概率和标签信息可视化ROC曲线

  8. 原理+代码|深入浅出Python随机森林预测实战

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 寒梅最堪恨,长作去年花. 前言 组 ...

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

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

最新文章

  1. Java并发:分布式应用限流 Redis + Lua 实践
  2. mysql常用字段及长度
  3. 循序渐进 OSPF的详细剖析(三)
  4. python常见问题
  5. SPARK:作业基本运行原理
  6. bp神经网络预测模型_【2020顶会KDD】AutoST:面向时空预测的高效神经网络学习模型...
  7. linux dd 硬盘 脚本,如何使用dd命令测试Linux磁盘的读写速度
  8. RabbitMQ中Confirm确认与Return返回消息详解(八)
  9. emerald sword(打倒大魔王)
  10. 李炎恢php学习视频教程下载
  11. 搜狗输入法 VS 拼音加加
  12. 用极致业务基础平台研发的族谱管理软件
  13. unity3d安装IOS Support失败原因,完美解决。
  14. 如何在web配置一个高效采集数据的DTM?
  15. 一个程序员的真实故事上
  16. win10插入耳机没声音,如何设置声音
  17. 原生JS实现点击按钮显示更多内容
  18. 修改MP4文件二进制内容,实现安卓Camera2旋转录制视频画面功能
  19. android照片编辑软件,美易照片编辑器下载
  20. 什么是数据库?数据库的作用想学数据库必看 (1)

热门文章

  1. Mesh Shading
  2. HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)
  3. 国家开发银行软件测试工资待遇,一名省直公务员告诉你绝对准确的国家开发银行员工收入,与省厅公务员作详细对比...
  4. java工程师面试题大全100%公司笔试题你都能碰到几个
  5. RP网页设计中的默认字体:{font: 12px/1.5 Tahoma, Helvetica, Arial, sans-serif;}
  6. 运行tomcat 时报错,提示无法找到相关的jar包 Publishing failed with multiple errors Error reading file
  7. 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
  8. 如何使用正则表达式?
  9. 3DTouch功能开发
  10. 提升嵌入式开发效率小技巧——开发环境配置