5分彩app平台_通过机器学习的线性回归算法预测股票走势(用Python实现)
- 时间:
- 浏览:0
- 来源:小高技术网_提供QQ资源网技术_QQ技术网资讯
在买车人的新书里,将通过股票案例讲述Python知识点,让我们在学习Python的一起去还能掌握相关的股票知识,所谓一举两得。这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn库实现线性回归预测的技巧。
本文先讲以波士顿房价数据为例,讲述线性回归预测模型的搭建法律最好的依据,要是将再你你这个基础上,讲述以线性预测模型预测股票的实现代码。本博文是从买车人的新书里摘取的,新书预计今年年底前出版,敬请我们关注。
正文要是要是刚开始(长文预警)
------------------------------------------------------------------------------------------------------------------------------------------------------
1 波士顿房价数据分析
安装好Python的Sklearn库后,在安装包下的路径中就能就看描述波士顿房价的csv文件,具体路径是“python安装路径\Lib\site-packages\sklearn\datasets\data”,在你你这个目录中还包含 了Sklearn库会用到的因此 数据文件,本节用到的是包含 在boston_house_prices.csv文件中的波士顿房价信息。打开你你这个文件,都需用就看如图所示的数据。
第1行的306表示该文件包包含 306条样本数据,即有306条房价数据,而13表示有1兩个 影响房价的型态值,即从A列到M列这13列的型态值数据会影响第N列MEDV(即房价值),在表13.1中列出了帕累托图列的英文标题及其含义。
波士顿房价文件帕累托图中英文标题一览表
标题名 |
中文含义 |
标题名 |
中文含义 |
CRIM |
城镇人均犯罪率 |
DIS |
到波士顿兩个 中心区域的加权距离 |
ZN |
住宅用地超过某数值的比例 |
RAD |
辐射性公路的接近指数 |
INDUS |
城镇非零售商用土地的比例 |
TAX |
每 300 美元的全值财产税率 |
CHAS |
查理斯河相关变量,如边界是河流则为1,因此为0 |
PTRATIO |
城镇师生比例 |
NOX |
一氧化氮浓度 |
MEDV |
是自住房的平均房价 |
RM |
住宅平均房间数 |
||
AGE |
1940年要是建成的自用房屋比例 |
从表中都需用就看,波士顿房价的数值(即MEDV)和诸如“住宅用地超过某数值的比例”等1兩个 型态值有关。而线性回归要补救的问题图片是,量化地找出哪几个型态值和目标值(即房价)的线性关系,即找出如下的k1到k13系数的数值和b你你这个常量值。
MEDV = k1*CRIM + k2*ZN + … + k13*LITAT + b
上述参数有1兩个 ,为了冗杂问题图片,先计算有有兩个 多型态值(DIS)与房价(MEDV)的关系,因此在此基础上讲述1兩个 型态值与房价关系的计算法律最好的依据。
因此这麼有兩个 多多型态值DIS,它与房价的线性关系表达式如下所示。在计算出k1和b的值要是,因此再输入对应DIS值,即可据此计算MEDV的值,以此实现线性回归的预测效果。
MEDV = k1*DIS + b
2 以波士顿房价数据为案例,搭建包含 晒 兩个 多型态值的线性预测模型
在下面的OneParamLR.py范例应用tcp连接中,通过调用Sklearn库中的法律最好的依据,以训练加预测的法律最好的依据,推算出有有兩个 多型态值(DIS)与目标值(MEDV,即房价)的线性关系。
1 # !/usr/bin/env python 2 # coding=utf-8 3 import numpy as np 4 import pandas as pd 5 import matplotlib.pyplot as plt 6 from sklearn import datasets 7 from sklearn.linear_model import LinearRegression
在上述代码中导入了必要的库,其中第6行和第7行用于导入sklearn相关库。
8 # 从文件中读数据,并转去掉 DataFrame格式 9 dataset=datasets.load_boston() 10 data=pd.DataFrame(dataset.data) 11 data.columns=dataset.feature_names # 型态值 12 data['HousePrice']=dataset.target # 房价,即目标值 13 # 这里单纯计算离中心区域的距离和房价的关系 14 dis=data.loc[0:data['DIS'].size-1,'DIS'].as_matrix() 15 housePrice=data.loc[0:data['HousePrice'].size-1,'HousePrice'].as_matrix()
在第9行中,加载了Sklearn库下的波士顿房价数据文件,并赋值给dataset对象。在第10行通过dataset.data读取了文件中的数据。在第11行通过dataset.feature_name读取了型态值,如前文所述,data.columns对象包包含 了1兩个 型态值。在第12行通过dataset.target读取目标值,即MEDV列的房价,并把目标值设置到data的HousePrice列中。
在第14行读取了DIS列的数据,并调用as_matrix法律最好的依据把读到的数据转去掉 矩阵中一列的格式,在第15行中,是用同样的法律最好的依据把房价数值转去掉 矩阵中列的格式。
16 # 转置一下,因此数据是竖排的 17 dis=np.array([dis]).T 18 housePrice=np.array([housePrice]).T 19 # 训练线性模型 20 lrTool=LinearRegression() 21 lrTool.fit(dis,housePrice) 22 # 输出系数和截距 23 print(lrTool.coef_) 24 print(lrTool.intercept_)
因此当前在dis和housePrice变量中保存是的“列”形式的数据,因此在第16行和第17行中,需用把它们转去掉 行格式的数据。
在第20行中,通过调用LinearRegression法律最好的依据创建了有有兩个 多用于线性回归分析的lrTool对象,在第21行中,通过调用fit法律最好的依据进行基于线性回归的训练。这里训练的目的是,根据传入的一组型态值dis和目标值MEDV,推算出MEDV = k1*DIS + b公式中的k1和b的值。
调用fit法律最好的依据进行训练后,ltTool对象就内含了系数和截距等线性回归相关的参数,通过第23行的打印说说输出了系数,即参数k1的值,而第24行的打印说说输出了截距,即参数b的值。
25 # 画图显示 26 plt.scatter(dis,housePrice,label='Real Data') 27 plt.plot(dis,lrTool.predict(dis),c='R',linewidth='2',label='Predict') 28 # 验证数据 29 print(dis[0]) 30 print(lrTool.predict(dis)[0]) 31 print(dis[2]) 32 print(lrTool.predict(dis)[2]) 33 34 plt.legend(loc='best') # 绘制图例 35 plt.rcParams['font.sans-serif']=['SimHei'] 36 plt.title("DIS与房价的线性关系") 37 plt.xlabel("DIS") 38 plt.ylabel("HousePrice") 39 plt.show()
在第26行中,通过调用scatter法律最好的依据绘制出x值是DIS,y值是房价的诸多散点,第27行则是调用plot法律最好的依据绘制出DIS和预测结果的关系,即十根直线。
要是要是用Matplotlib库中的法律最好的依据绘制出x轴y轴文字和图形标题等信息。运行上述代码,即可就看如图所示的结果。
图中各个点表示真实数据,每个点的x坐标是DIS值,y坐标是房价。而红线则表示根据当前DIS值,通过线性回归预测出的房价结果。
下面通过输出的数据,进一步说明图中以红线形式显示的预测数据的含义。通过代码的第23行和24行输出了系数和截距,结果如下。
[[1.09161302]]
[18.39008833]
即房价和DIS满足如下的一次函数关系:MEDV = 1.09161302*DIS + 18.39008833。
从第29行到第32行输出了两组DIS和预测房价数据,每两行是一组,结果如下。
[4.09]
[22.85478557]
[4.9671]
[23.81223934]
在因此得到的公式中,MEDV = 1.09161302*DIS + 18.39008833,把第1行的4.09代入DIS,把第2行的22.85478557代入MEDV,发现结果吻合。同理,把第3行的DIS和第4行MEDV值代入上述公式,结果也吻合。
也要是说,通过基于线性回归的fit法律最好的依据,训练了lrTool对象,使之包含 了相关参数,原来因此输入因此 的DIS值,这麼ltTool对象根据相关参数不能算出对应的房价值。从可视化的效果来看,用DIS预测MEDV房价的效果暂且好,原因分析分析着是毕竟只用了其包含 晒 兩个 多型态值。不过,通过你你这个范例应用tcp连接,还是都需用看出基于线性回归实现预测的一般步骤:根据一组(306条)数据的型态值(本范例中是DIS)和目标值(房价),调用fit法律最好的依据训练ltTool等线性回归中的对象,让它包含 相关系数,要是再调用predict法律最好的依据,根据由相关系数组成的公式,通过计算预测目标结果。
3 以波士顿房价数据为案例,实现基于多个型态值的线性回归
因此要用到波士顿房价范例中1兩个 型态值来进行预测,这麼对应的公式如下,这里要做的工作是,通过fit法律最好的依据,计算如下的k1到k13系数以及b截距值。
MEDV = k1*CRIM + k2*ZN + … + k13*LITAT + b
在下面的MoreParamLR.py范例应用tcp连接中,实现用1兩个 型态值预测房价的功能。
1 # !/usr/bin/env python 2 # coding=utf-8 3 from sklearn import datasets 4 from sklearn.linear_model import LinearRegression 5 import matplotlib.pyplot as plt 6 # 加载数据 7 dataset = datasets.load_boston() 8 # 型态值集合,不包括目标值房价 9 featureData = dataset.data 10 housePrice = dataset.target
在第7行中加载了波士顿房价的数据,在第9行和第10行分别把1兩个 型态值和房价目标值装到featureData和housePrice这有兩个 多多变量中。
11 lrTool = LinearRegression() 12 lrTool.fit(featureData, housePrice) 13 # 输出系数和截距 14 print(lrTool.coef_) 15 print(lrTool.intercept_)
上述代码和前文推算有有兩个 多型态值和目标值关系的代码很类式于,只不过在第12行的fit法律最好的依据中,传入的型态值是1兩个 ,而需用有兩个 多多。在第14行和第15行的应用tcp连接说说同样输出了各项系数和截距数值。
16 # 画图显示 17 plt.scatter(housePrice,housePrice,label='Real Data') 18 plt.scatter(housePrice,lrTool.predict(featureData),c='R',label='Predicted Data') 19 plt.legend(loc='best') # 绘制图例 20 plt.rcParams['font.sans-serif']=['SimHei'] 21 plt.xlabel("House Price") 22 plt.ylabel("Predicted Price") 23 plt.show()
在第17行绘制了x坐标和y坐标需用房价值的散列点,哪几个点表示原始数据,在第19行绘制散列点时,x坐标是原始房价,y坐标是根据线性回归推算出的房价。
运行上述代码,即可就看如图所示的结果。其中天蓝色散列点表示真实数据,红色散列点表示预测出的数据,和图13-4相比,预测出的房价结果数据更靠近真实房价数据,这是因此这次用了1兩个 型态值来预测,而要是只用了其包含 晒 兩个 多型态数据来预测。
另外,从控制台中都需用就看由第14行和15行的应用tcp连接说说打印出的各项系数和截距。
1 [-1.03011358e-01 4.64204584e-02 2.05586264e-02 2.68673382e+00 -1.77666112e+01 3.30986521e+00 6.92224640e-04 -1.47556685e+00 3.03049479e-01 -1.23345939e-02 -9.52747232e-01 9.31168327e-03 -5.24758378e-01]
2 36.459488383089855
其中,第1行表示1兩个 型态值的系数,而第2行表示截距。代入上述系数,即可就看如下的1兩个 型态值与目标房价的对应关系——预测公式。得出如下的公式后,再输入因此 的1兩个 型态值,即可预测出对应的房价。
MEDV = -1.03011358e-01*CRIM + 4.64204584e-02*ZN + … + -5.24758378e-01*LITAT + 36.459488383089855
4 激动人心的时刻,预测股票价格
在这里,将在下面的predictStockByLR.py范例应用tcp连接中,根据股票历史的开盘价、收盘价和成交量等型态值,从数学强度来预测股票未来的收盘价。
1 # !/usr/bin/env python 2 # coding=utf-8 3 import pandas as pd 4 import numpy as np 5 import math 6 import matplotlib.pyplot as plt 7 from sklearn.linear_model import LinearRegression 8 from sklearn.model_selection import train_test_split 9 # 从文件中获取数据 10 origDf = pd.read_csv('D:/stockData/ch13/3033052018-09-012019-05-31.csv',encoding='gbk') 11 df = origDf[['Close', 'High', 'Low','Open' ,'Volume']] 12 featureData = df[['Open', 'High', 'Volume','Low']] 13 # 划分型态值和目标值 14 feature = featureData.values 15 target = np.array(df['Close'])
第10行的应用tcp连接说说从包含 股票信息的csv文件中读取数据,在第14行设置了型态值是开盘价、最高价、最低价和成交量,一起去在第15行设置了要预测的目标列是收盘价。在后续的代码中,需用将计算出开盘价、最高价、最低价和成交量这兩个 型态值和收盘价的线性关系,并在此基础上预测收盘价。
16 # 划分训练集,测试集 17 feature_train, feature_test, target_train ,target_test = train_test_split(feature,target,test_size=0.05) 18 pridectedDays = int(math.ceil(0.05 * len(origDf))) # 预测天数 19 lrTool = LinearRegression() 20 lrTool.fit(feature_train,target_train) # 训练 21 # 用测试集预测结果 22 predictByTest = lrTool.predict(feature_test)
第17行的应用tcp连接说说通过调用train_test_split法律最好的依据把包含 在csv文件中的股票数据分成训练集和测试集,你你这个法律最好的依据前有有兩个 多参数分别是型态列和目标列,而第有有兩个 多参数0.05则表示测试集的大小是总量的0.05。该法律最好的依据返回的兩个 参数分别是型态值的训练集、型态值的测试集、要预测目标列的训练集和目标列的测试集。
第18行的应用tcp连接说说计算了要预测的交易日数,在第19行中构建了有有兩个 多线性回归预测的对象,在第20行是调用fit法律最好的依据训练型态值和目标值的线性关系,请注意这里的训练是针对训练集的,在第22行中,则是用型态值的测试集来预测目标值(即收盘价)。也要是说,是用多个交易日的股价来训练lrTool对象,并在此基础上预测后续交易日的收盘价。至此,上端的应用tcp连接代码完成了相关的计算工作。
23 # 组装数据 24 index=0 25 # 在前95%的交易日中,设置预测结果和收盘价一致 26 while index < len(origDf) - pridectedDays: 27 df.ix[index,'predictedVal']=origDf.ix[index,'Close'] 28 df.ix[index,'Date']=origDf.ix[index,'Date'] 29 index = index+1 30 predictedCnt=0 31 # 在后5%的交易日中,用测试集推算预测股价 32 while predictedCnt<pridectedDays: 33 df.ix[index,'predictedVal']=predictByTest[predictedCnt] 34 df.ix[index,'Date']=origDf.ix[index,'Date'] 35 predictedCnt=predictedCnt+1 36 index=index+1
在第26行到第29行的while循环中,在第27行把训练集帕累托图的预测股价设置成收盘价,并在第28行设置了训练集帕累托图的日期。
在第32行到第36行的while循环中,遍历了测试集,在第33行的应用tcp连接说说把df中表示测试结果的predictedVal列设置成相应的预测结果,一起去也在第34行的应用tcp连接说说逐行设置了每条记录中的日期。
37 plt.figure() 38 df['predictedVal'].plot(color="red",label='predicted Data') 39 df['Close'].plot(color="blue",label='Real Data') 40 plt.legend(loc='best') # 绘制图例 41 # 设置x坐标的标签 42 major_index=df.index[df.index%10==0] 43 major_xtics=df['Date'][df.index%10==0] 44 plt.xticks(major_index,major_xtics) 45 plt.setp(plt.gca().get_xticklabels(), rotation=30) 46 # 带网格线,且设置了网格样式 47 plt.grid(line) 48 plt.show()
在完成数据计算和数据组装的工作后,从第37行到第48行应用tcp连接代码的最后,实现了可视化。
第38行和第39行的应用tcp连接代码分别绘制了预测股价和真实收盘价,在绘制的要是设置了不同的颜色,也设置了不同的label标签值,在第40行通过调用legend法律最好的依据,根据收盘价和预测股价的标签值,绘制了相应的图例。
从第42行到第45行设置了x轴显示的标签文字是日期,为了不要标签文字显示过密,设置了“每10个日期里只显示有有兩个 多”的显示法律最好的依据,因此在第47行设置了网格线的效果,最后在第48行通过调用show法律最好的依据绘制出整个图形。运行本范例应用tcp连接,即可就看如图所示的结果。
从图中都需用看出,蓝线表示真实的收盘价(图中完正的线),红线表示预测股价(图中靠右边的线。因此本书黑白印刷的原因分析分析着,在书中读者看这麼天蓝色和红色,请读者在买车人的计算机上运行你你这个范例应用tcp连接即可就看红蓝两色的线)。确实 预测股价和真实价之间有差距,但涨跌的趋势大致相同。因此在预测时这麼考虑到涨跌停的因素,什么都预测结果的涨跌幅度比真实数据要大。
5 系列文总结和版权说明
本文是给应用tcp连接员加财商系列,要是的系列文如下:
本文力争做到完正,比如代码按行编号,并针对行号完正解释,且图文并茂,什么都要是我们感觉都需用,请尽量帮忙推荐一下。本文的内容即将出书,在出版的书里,是用股票案例和我们讲述Python入门时的知识点,敬请期待。
有不少前女网民 转载和不要转载我的博文,买车人感到十分荣幸,这也是买车人不断写博文的动力。关于本文的版权有如下统一的说明,抱歉就不逐一回复了。
1 本文可转载,不要告知,转载时请用链接的法律最好的依据,给出原文出处,别简单地通过文本法律最好的依据给出,一起去写明原作者是hsm_computer。
2 在转载时,请原文转载 ,谢绝洗稿。因此买车人保留追究法律责任的权利。