概述
Python使用线性回归实现对股票的预测
使用的股票数据从大型数据网站www.quandl.com获取,股票数据特征包括:开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、交易额(Volume)及调整后的开盘价(Adj.Open)、最高价(Adj.High)、最低价(Adj.Low)、收盘价(Adj.Close)和交易额(Adj.Volume)
一、获取数据.
首先在quandl网站注册账号,有一个专属key用于获取网站海量数据。
本次使用google股票数据,获取数据代码如下:
# 线性回归股票预测
from datetime import datetime
import quandl
import math
from sklearn import preprocessing #包提供几种常用的效用函数及转换器类,用于更改原始特征向量表示形式以适应后续评估量。
import numpy as np
# 从quandl处 获取数据
quandl.ApiConfig.api_key = '这里填写自己的key值';
df = quandl.get('WIKI/GOOGL');
print (df.columns.tolist()) #输出所有的列
输出
二、数据处理
# 定义预测列标签名 存放研究对象的标签名
forecast_col = 'Adj. Close';
# 定义预测天数 这里取所有数据量长度的百分之1
forecats_count = math.ceil(len(df)*0.01)
# z只用到以下字段
df = df[['Adj. Open','Adj. High','Adj. Low','Adj. Close','Adj. Volume']];
print(df);
# 构造两个新的列 HL_PCT为股票最高价与最低价变化百分比 PCT_Change为股票收盘价与开盘价的变化百分比
df['HL_PCT'] = (df['Adj. High']-df['Adj. Low'])/df['Adj. Close']*100;
df['PCT_Change'] = (df['Adj. Close']-df['Adj. Open'])/df['Adj. Open']*100;
# 真正用到的特征字段如下
df = df[['Adj. Close','HL_PCT','PCT_Change','Adj. Volume']];
print(df.head());
# sklearn并不会处理空值 这里将空值全部填充为比较难出现的值 这里填-99999 增加inplace=True 填充的作用将改变数据源 否则不改变数据源
df.fillna(-99999,inplace=True);
# 增加label字段表示预测结果 即y 用df['Adj. Close']向前移动forecats_count来进行表示
df['label'] = df[forecast_col].shift(forecats_count);
三、生成X y以及预测用到的X_lately
X = np.array(df.drop(['label'],axis=1)); #axis=1 表示删除这一列
X = preprocessing.scale(X); #对数据进行规范化处理 示其服从正态分布
# 上面生成label时 留下%1行没有数据 所有其对应的其他数据可以作为预测时的输入数据
X_lately = X[-forecats_count:];
X = X[:-forecats_count];
df.dropna(inplace=True); # 抛弃那些 label列为空的行 之前已经填充过了 所以现在只有label有空的
y = np.array(df['label']);
四、机器学习
from sklearn.linear_model import LinearRegression
from sklearn import model_selection,svm
# 将X y 分为训练集和测试集合
X_train,X_test,Y_train,Y_test = model_selection.train_test_split(X,y,test_size=0.2,random_state=1)
# 训练
lr = LinearRegression();
lr.fit(X_train,Y_train);# 训练
accuracy = lr.score(X_test,Y_test);# 用测试数据评估准确性
print("输出评估值",accuracy);
# 进行预测
forecats_set = lr.predict(X_lately);
print("预测值",forecats_set);
print("截距",lr.intercept_);
print("系数",lr.coef_);
输出
五、画图显示
import matplotlib.pyplot as plt
from matplotlib import style
# 修改matplotlib样式
style.use('ggplot');
one_day = 86400; #86400秒 代表24小时
# 在df中新建Forecast列,用于存放预测值
df['Forecast'] = np.nan;
# 取df最后一行的时间索引
last_date = df.iloc[-1].name;
last_unix = last_date.timestamp(); #将时间转化为时间戳
next_unix = last_unix+one_day; #下一天的时间戳
# 遍历预测结果想df中追加行
# 这些行除了Forecast字段其他全部设置为nan
for value in forecats_set:
next_date = datetime.fromtimestamp(next_unix);
next_unix += one_day;
# [np.nan for _ in range(len(df.columns)-1]生成不包含Forecast字段的列表
# [value] 是只包含Forecast值的列表
df.loc[next_date] = [np.nan for _ in range(len(df.columns)-1)]+[value];
# 绘制图形
df["Adj. Close"].plot();
df["Forecast"].plot();
plt.legend(loc=4); #loc参数设置图例的显示位置的
plt.xlabel('Date');
plt.ylabel('Price');
plt.show();
输出
图中的曲线部分为历史数据,最上部的竖直线部分为预测数据
最后
以上就是动人楼房为你收集整理的Python使用线性回归实现对股票的预测的全部内容,希望文章能够帮你解决Python使用线性回归实现对股票的预测所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复