基于线性回归的股票预测

  • 数据获取
  • 数据预处理
  • 编码实现

数据获取

我们可以从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()

机器学习:回归分析——基于线性回归的股票预测相关推荐

  1. 基于线性回归的股票预测案例

    基于线性回归的股票预测案例 本次的案例使用的是股票数据,数据源从www.quandl.com 获取.本次案例主要是为了练习线性回归 pip install quandl 安装quandl库. 在使用的 ...

  2. 手把手教你:基于LSTM的股票预测系统

    系列文章 第七章.手把手教你:基于深度残差网络(ResNet)的水果分类识别系统 第六章.手把手教你:人脸识别的视频打码 第五章.手把手教你:基于深度学习的滚动轴承故障诊断 目录 系列文章 一.项目简 ...

  3. 大数据毕业设计 基于时间序列的股票预测与分析系统 - 大数据分析

    文章目录 1 简介 2 时间序列的由来 2.1 四种模型的名称: 3 数据预览 4 理论公式 4.1 协方差 4.2 相关系数 4.3 scikit-learn计算相关性 5 金融数据的时序分析 5. ...

  4. 基于循环神经网络股票预测系统

    循环神经网络-Simple RNN RNN神经网络模型是一种常用的深度神经网络模型,已成功应用于语言识别.文本分类等多个研究领域.相比其他网络模型,RNN最大的优势在于引入了时序与定向循环的概念,能够 ...

  5. python基于svm实现指数预测_基于SVM的股票预测 Python实现 附Github

    SVM 支持向量机 原理就不赘述了,其余的文章有讲过.SVM是一种十分优秀的分类算法,使用SVM也能给股票进行一定程度上的预测. 核心 因为是分类算法,因此不像ARIMA一样预测的是时序.分类就要有东 ...

  6. 机器学习训练营-基于XGBoost的分类预测学习笔记

    文章目录 前言 一.学习知识点概要 二.学习内容 1 XGBoost的应用及优缺点 1.1 XGBoost的应用 1.2 XGBoost的优缺点 2 基于天气数据集的XGBoost分类实战 2.1 目 ...

  7. 基于线性回归的房价预测分析

    一.分析问题 尝试使用线性回归模型分析波士顿房价数据集,达到可通过房子属性(X)预测房价(y)的效果. 二.获取数据 sklearn.datasets中自带的load_boston数据集. 三.数据探 ...

  8. PostgreSQL 多元线性回归 - 2 股票预测

    前面写了两篇关于股价预测的,都是用的一元回归,也就是说只用了1个自变量. 例如用昨天的收盘价预测今天的收盘价,但是元素太单一的话,除非自变量的影响因素非常大,否则容易不准. 所以就有了多元回归,例如, ...

  9. 基于LSTM实现股票预测

    LSTM原理 前面的博客中使用传统的循环神经网络RNN,可以通过记忆体实现短期记忆进行连续数据的预测,但是当连续数据的序列变长时,会使展开时间步过长,在反向传播更新参数时,梯度要按照时间步连续相乘,会 ...

最新文章

  1. 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1
  2. [BTS06]BizTalk2006 SDK阅读笔记(九) 业务活动监控
  3. Freemarker获取pojo属性
  4. MCU提高ADC采样精度的几种方案
  5. 贪心算法|Greedy Algorithms(背包问题)
  6. Java之品优购课程讲义_day12(2)
  7. Linux 查找进程与结束进程
  8. linux命令补遗 - 1
  9. mysql5.7.22.zip使用,mysql5.7.22 zip 版安装
  10. UAV运动学方面的约束
  11. 【运筹学】产销平衡问题的表上作业法
  12. 数字调制解调—扩频通信和伪码同步
  13. 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)...
  14. uipath对SAP的抓取
  15. 【NVMe2.0b 7】NVMe 基本队列数据结构
  16. ZooZ应用内移动支付解决方案公司获150万美金种子投资
  17. 华芯通关闭引发的深度思考
  18. 验证邮箱地址和手机号码
  19. dede织梦批量导入关键词
  20. linux网络编程--网络编程的基本函数介绍与使用

热门文章

  1. 网络舆情事件预警与分析工作实施措施与流程详解
  2. JMX学习笔记(四) JMX RMI
  3. 数字孪生技术助力高炉数字化建设的可行性
  4. 生命中最重要的两个日子,一个是你出生,一个是你发现自己为什么而生
  5. 一种新型的智能城市工业物联网安全攻击检测框架
  6. 【Machine Learning 学习笔记】Stochastic Dual Coordinate Ascent for SVM 代码实现
  7. 汉明码生成过程图文详解
  8. 关于AWS中最小权限原则的理解
  9. 音频文件格式转换python实现——flac转wav
  10. html编辑器的值+dede,dedecms升级ckeditor为ueditor编辑器,详细修改方法和步骤