机器学习:回归分析——基于线性回归的股票预测
基于线性回归的股票预测
- 数据获取
- 数据预处理
- 编码实现
数据获取
我们可以从https://data.nasdaq.com/ 获取股票数据集,每个ip访问quandl有次数(50次)的限制,如果访问次数比较多的话,可以到官网注册一个账号。个人可以注册获取一个api密钥下载上面的数据集。
#先安装quandl包
import quandl
#这里我们用这个数据集
df = quandl.get('WIKI/AAPL')
df.head()
数据预处理
现在我们的目标是要根据High,Low,Close以及Volumn列来预测Close
由上面的数据集可以看到带Adj前缀的数据是除权后的数据(除权,是由于公司“股本”增加,每股股票所代表的企业实际价值(每股净资产)有所减少(即被摊薄),需要在发生该事实之后,从股票市场价格中剔除这部分因素,而形成的价格剔除行为。)
所以我们主要使用的数据特征为调整后的指标开盘价(Adj.Open)、最高价(Adj.High)、最低价(Adj.Low)、收盘价(Adj.Close)、交易额(Adj.Volume),这里需要知道两个数据特征:
因此,自变量为:Adj.Open、HL_PCT、PCT_change、Adj.Volume因变量为:Adj.Close
但是我们需要对自变量数据进行规范化处理,使之服从正态分布(数据标准化的目的也是因为数据的单位背景不一,因此只有统一到一个标准下才具有可比性),数据标准化需要用到sklearn.preprocessing 的scale()函数
编码实现
#导入相关包
import quandl
import math
import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn import model_selection,svm
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from matplotlib import style
import time,datetimedata = quandl.get('WIKI/AAPL')
#定义预测列变量forecast_col,也就是收盘价
forecast_col = 'Adj. Close'
#定义预测的天数forecast_out,也就是预测的数据长度,这里设置为所有数据的1%,得到的是一个整数
#math.ceil(x) 返回不小于x的最接近的整数
forecast_out = int(math.ceil(0.01*len(data)))
#选取只用到的几列
data = data[['Adj. Open','Adj. High','Adj. Low','Adj. Close','Adj. Volume']]
#构造特征数据HL_PCT、PCT_change
data['HL_PCT'] = (data['Adj. High'] - data['Adj. Low'])/data['Adj. Low'] * 100.0
data['PCT_change'] = (data['Adj. Close'] - data['Adj. Open'])/data['Adj. Open'] * 100.0#选取真正用到的字段
data = data[['Adj. Close','HL_PCT','PCT_change','Adj. Volume']]
#空值预处理,这里的处理方法是将空值设置为一个比较难出现的值
data.fillna(-99999,inplace = True)#将Adj. Close列数据往前移动1%行,也就是前forecast_out行数据舍掉,剩下后99%的数据往前移动
#shift()函数,用于对dataframe中的数整体上移或下移,当为正数时,向下移。当为负数时,向上移。
data['label'] = data[forecast_col].shift(-forecast_out)
data.to_csv("F:\小组\Python\stock_regression.csv")
data.head()
data.drop(['label'],1)
#现在生成真正要用到的模型中去的数据X、y以及预测时要用到的数据X_lately
X = np.array(data.drop(['label'],1))
#数据规范化
X = preprocessing.scale(X)
#将X中后1%行数据作为待预测数据
X_lately = X[-forecast_out:]
#X则取前99%的数据
X = X[:-forecast_out]
#抛弃label列中为空的那些行
data.dropna(inplace = True)
#生成对应X的y的数据
y = np.array(data['label'])
# 机器学习模型训练拟合部分#将数据分割成训练集和测试集
X_train,X_test,y_train,y_test = model_selection.train_test_split(X,y,test_size = 0.2)#生成Scikit-Learn的线性回归对象
#这里n_jobs表示使用CPU的个数,当为-1时,代表使用全部的CPU
clf = LinearRegression(n_jobs = 1)#开始训练
clf.fit(X_train,y_train)#评估准确性
accuracy = clf.score(X_test,y_test)#进行预测,forecast_set是预测结果
forecast_set = clf.predict(X_lately)
'''
预测部分处理及可视化
'''
#修改matplotlib样式
style.use('ggplot') #ggplot是背景网格
one_day = 86400#一天等于86400秒#在data中新建列Forecast,用于存放预测结果的数据
data['Forecast'] = np.nan#取data最后一行的时间索引
last_date = data.iloc[-1].name
#转化为时间戳
last_unix = last_date.timestamp()
#time.mktime(time.strptime(last_date,"%Y/%m/%d"))
#加一天的时间,跳转到下一天
next_unix = last_unix + one_day
#遍历预测结果,用它向data中追加行#这些行除了Forecast字段,其他都设为np.nan
for i in forecast_set:#此命令是时间戳转成时间,得到的类型也是datetime类型 ,类似于“2017-11-08 08:00:00”next_date = datetime.datetime.fromtimestamp(next_unix)next_unix += one_day#这里要用定位的话应该是字符串,所以这里的格式还应该经过测试之后再索引#strftime()函数用来截取时间#[np.nan for _ in range(len(data.columns)-1)]生成不包含Forecast字段的列表data.loc[next_date.strftime("%Y/%m/%d")] = [np.nan for _ in range(len(data.columns)-1)] + [i]
data['Adj. Close'].plot()
data['Forecast'].plot()
plt.legend(loc = 1)
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()
图中的曲线部分主要为历史数据,最上部的数显部分为预测数据
df = data.iloc[data.shape[0]-1000-1:data.shape[0]-1] #获取后1000行数据,绘制详细图
df['Adj. Close'].plot()
df['Forecast'].plot()
plt.legend(loc = 1)
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()
机器学习:回归分析——基于线性回归的股票预测相关推荐
- 基于线性回归的股票预测案例
基于线性回归的股票预测案例 本次的案例使用的是股票数据,数据源从www.quandl.com 获取.本次案例主要是为了练习线性回归 pip install quandl 安装quandl库. 在使用的 ...
- 手把手教你:基于LSTM的股票预测系统
系列文章 第七章.手把手教你:基于深度残差网络(ResNet)的水果分类识别系统 第六章.手把手教你:人脸识别的视频打码 第五章.手把手教你:基于深度学习的滚动轴承故障诊断 目录 系列文章 一.项目简 ...
- 大数据毕业设计 基于时间序列的股票预测与分析系统 - 大数据分析
文章目录 1 简介 2 时间序列的由来 2.1 四种模型的名称: 3 数据预览 4 理论公式 4.1 协方差 4.2 相关系数 4.3 scikit-learn计算相关性 5 金融数据的时序分析 5. ...
- 基于循环神经网络股票预测系统
循环神经网络-Simple RNN RNN神经网络模型是一种常用的深度神经网络模型,已成功应用于语言识别.文本分类等多个研究领域.相比其他网络模型,RNN最大的优势在于引入了时序与定向循环的概念,能够 ...
- python基于svm实现指数预测_基于SVM的股票预测 Python实现 附Github
SVM 支持向量机 原理就不赘述了,其余的文章有讲过.SVM是一种十分优秀的分类算法,使用SVM也能给股票进行一定程度上的预测. 核心 因为是分类算法,因此不像ARIMA一样预测的是时序.分类就要有东 ...
- 机器学习训练营-基于XGBoost的分类预测学习笔记
文章目录 前言 一.学习知识点概要 二.学习内容 1 XGBoost的应用及优缺点 1.1 XGBoost的应用 1.2 XGBoost的优缺点 2 基于天气数据集的XGBoost分类实战 2.1 目 ...
- 基于线性回归的房价预测分析
一.分析问题 尝试使用线性回归模型分析波士顿房价数据集,达到可通过房子属性(X)预测房价(y)的效果. 二.获取数据 sklearn.datasets中自带的load_boston数据集. 三.数据探 ...
- PostgreSQL 多元线性回归 - 2 股票预测
前面写了两篇关于股价预测的,都是用的一元回归,也就是说只用了1个自变量. 例如用昨天的收盘价预测今天的收盘价,但是元素太单一的话,除非自变量的影响因素非常大,否则容易不准. 所以就有了多元回归,例如, ...
- 基于LSTM实现股票预测
LSTM原理 前面的博客中使用传统的循环神经网络RNN,可以通过记忆体实现短期记忆进行连续数据的预测,但是当连续数据的序列变长时,会使展开时间步过长,在反向传播更新参数时,梯度要按照时间步连续相乘,会 ...
最新文章
- 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1
- [BTS06]BizTalk2006 SDK阅读笔记(九) 业务活动监控
- Freemarker获取pojo属性
- MCU提高ADC采样精度的几种方案
- 贪心算法|Greedy Algorithms(背包问题)
- Java之品优购课程讲义_day12(2)
- Linux 查找进程与结束进程
- linux命令补遗 - 1
- mysql5.7.22.zip使用,mysql5.7.22 zip 版安装
- UAV运动学方面的约束
- 【运筹学】产销平衡问题的表上作业法
- 数字调制解调—扩频通信和伪码同步
- 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)...
- uipath对SAP的抓取
- 【NVMe2.0b 7】NVMe 基本队列数据结构
- ZooZ应用内移动支付解决方案公司获150万美金种子投资
- 华芯通关闭引发的深度思考
- 验证邮箱地址和手机号码
- dede织梦批量导入关键词
- linux网络编程--网络编程的基本函数介绍与使用
热门文章
- 网络舆情事件预警与分析工作实施措施与流程详解
- JMX学习笔记(四) JMX RMI
- 数字孪生技术助力高炉数字化建设的可行性
- 生命中最重要的两个日子,一个是你出生,一个是你发现自己为什么而生
- 一种新型的智能城市工业物联网安全攻击检测框架
- 【Machine Learning 学习笔记】Stochastic Dual Coordinate Ascent for SVM 代码实现
- 汉明码生成过程图文详解
- 关于AWS中最小权限原则的理解
- 音频文件格式转换python实现——flac转wav
- html编辑器的值+dede,dedecms升级ckeditor为ueditor编辑器,详细修改方法和步骤