1.5分飞艇平台_通过机器学习的线性回归算法预测股票走势(用Python实现)

  • 时间:
  • 浏览:0
  • 来源:上海网_专注上海新闻_上海的主流媒体

    在另一方的新书里,将通过股票案例讲述Python知识点,让亲戚亲戚或多或少人在学习Python的并肩还能掌握相关的股票知识,所谓一举两得。这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn库实现线性回归预测的技巧。

    本文先讲以波士顿房价数据为例,讲述线性回归预测模型的搭建法律法律法律依据,可是将再这人基础上,讲述以线性预测模型预测股票的实现代码。本博文是从另一方的新书里摘取的,新书预计今年年底前出版,敬请亲戚亲戚或多或少人关注。

    正文刚开始了(长文预警)

------------------------------------------------------------------------------------------------------------------------------------------------------

1  波士顿房价数据分析

    安装好Python的Sklearn库后,在安装包下的路径中就能想看 描述波士顿房价的csv文件,具体路径是“python安装路径\Lib\site-packages\sklearn\datasets\data”,在这人目录中还包含了Sklearn库会用到的或多或少数据文件,本节用到的是包含在boston_house_prices.csv文件中的波士顿房价信息。打开这人文件,可不并能想看 如图所示的数据。 

    第1行的506表示该文件中包含506条样本数据,即有506条房价数据,而13表示有15个影响房价的底部形态值,即从A列到M列这13列的底部形态值数据会影响第N列MEDV(即房价值),在表13.1中列出了每种列的英文标题及其含义。

波士顿房价文件每种中英文标题一览表

标题名

中文含义

标题名

中文含义

CRIM

城镇人均犯罪率

DIS

到波士顿5个中心区域的加权距离

ZN

住宅用地超过某数值的比例

RAD

辐射性公路的接近指数

INDUS

城镇非零售商用土地的比例

TAX

每 500 美元的全值财产税率

CHAS

查理斯河相关变量,如边界是河流则为1,可是为0

PTRATIO

城镇师生比例

NOX

一氧化氮浓度

MEDV

是自住房的平均房价

RM

住宅平均房间数

AGE

1940年可是建成的自用房屋比例

    从表中可不并能想看 ,波士顿房价的数值(即MEDV)和诸如“住宅用地超过某数值的比例”等15个底部形态值有关。而线性回归要除理的间题是,量化地找出哪些地方地方底部形态值和目标值(即房价)的线性关系,即找出如下的k1到k13系数的数值和b这人常量值。

    MEDV = k1*CRIM + k2*ZN + … + k13*LITAT + b

    上述参数有15个,为了僵化 间题,先计算另有5个底部形态值(DIS)与房价(MEDV)的关系,可是在此基础上讲述15个底部形态值与房价关系的计算法律法律法律依据。

    可是只能另有5个底部形态值DIS,它与房价的线性关系表达式如下所示。在计算出k1和b的值可是,可是再输入对应DIS值,即可据此计算MEDV的值,以此实现线性回归的预测效果。

    MEDV = k1*DIS + b

2  以波士顿房价数据为案例,搭建含另有5个底部形态值的线性预测模型

    在下面的OneParamLR.py范例守护进程运行中,通过调用Sklearn库中的法律法律法律依据,以训练加预测的法律法律法律依据,推算出另有5个底部形态值(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对象中包含了15个底部形态值。在第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法律法律法律依据创建了另有5个用于线性回归分析的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])

50   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.09161502]]

    [18.39008833]

    即房价和DIS满足如下的一次函数关系:MEDV = 1.09161502*DIS + 18.39008833。

    从第29行到第32行输出了两组DIS和预测房价数据,每两行是一组,结果如下。

    [4.09]

    [22.85478557]

    [4.9671]

    [23.81223934]

    在可是得到的公式中,MEDV = 1.09161502*DIS + 18.39008833,把第1行的4.09代入DIS,把第2行的22.85478557代入MEDV,发现结果吻合。同理,把第3行的DIS和第4行MEDV值代入上述公式,结果也吻合。

    也可是说,通过基于线性回归的fit法律法律法律依据,训练了lrTool对象,使之包含了相关参数,另另有5个可是输入或多或少的DIS值,没有 ltTool对象根据相关参数并能算出对应的房价值。从可视化的效果来看,用DIS预测MEDV房价的效果并不好,原应是毕竟只用了其中另有5个底部形态值。不过,通过这人范例守护进程运行,还是可不并能看出基于线性回归实现预测的一般步骤:根据一组(506条)数据的底部形态值(本范例中是DIS)和目标值(房价),调用fit法律法律法律依据训练ltTool等线性回归中的对象,让它包含相关系数,可是再调用predict法律法律法律依据,根据由相关系数组成的公式,通过计算预测目标结果。

3  以波士顿房价数据为案例,实现基于多个底部形态值的线性回归

    可是要用到波士顿房价范例中15个底部形态值来进行预测,没有 对应的公式如下,这里要做的工作是,通过fit法律法律法律依据,计算如下的k1到k13系数以及b截距值。

    MEDV = k1*CRIM + k2*ZN + … + k13*LITAT + b

    在下面的MoreParamLR.py范例守护进程运行中,实现用15个底部形态值预测房价的功能。

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行分别把15个底部形态值和房价目标值插进featureData和housePrice这另有5个变量中。

11   lrTool = LinearRegression()

12   lrTool.fit(featureData, housePrice)

13   # 输出系数和截距

14   print(lrTool.coef_)

15   print(lrTool.intercept_)

    上述代码和前文推算另有5个底部形态值和目标值关系的代码很类似于,只不过在第12行的fit法律法律法律依据中,传入的底部形态值是15个,而前会另有5个。在第14行和第15行的守护进程运行一句话同样输出了各项系数和截距数值。

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相比,预测出的房价结果数据更靠近真实房价数据,这是可是这次用了15个底部形态值来预测,而可是只用了其中另有5个底部形态数据来预测。

    另外,从控制台中可不并能想看 由第14行和15行的守护进程运行一句话打印出的各项系数和截距。

1    [-1.05011358e-01  4.64204584e-02  2.05586264e-02  2.68673382e+00  -1.77666112e+01  3.50986521e+00 6.92224640e-04 -1.47556685e+00  3.05049479e-01 -1.23345939e-02 -9.52747232e-01  9.31168327e-03 -5.24758378e-01]

2    36.459488385089855

    其中,第1行表示15个底部形态值的系数,而第2行表示截距。代入上述系数,即可想看 如下的15个底部形态值与目标房价的对应关系——预测公式。得出如下的公式后,再输入或多或少的15个底部形态值,即可预测出对应的房价。

    MEDV = -1.05011358e-01*CRIM + 4.64204584e-02*ZN + … + -5.24758378e-01*LITAT + 36.459488385089855

4  激动人心的时刻,预测股票价格

    在这里,将在下面的predictStockByLR.py范例守护进程运行中,根据股票历史的开盘价、收盘价和成交量等底部形态值,从数学深度1来预测股票未来的收盘价。

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/5035052018-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行的守护进程运行一句话从包含股票信息的csv文件中读取数据,在第14行设置了底部形态值是开盘价、最高价、最低价和成交量,并肩在第15行设置了要预测的目标列是收盘价。在后续的代码中,需要将计算出开盘价、最高价、最低价和成交量这5个底部形态值和收盘价的线性关系,并在此基础上预测收盘价。

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行的守护进程运行一句话通过调用train_test_split法律法律法律依据把包含在csv文件中的股票数据分成训练集和测试集,这人法律法律法律依据前另有5个参数分别是底部形态列和目标列,而第另有5个参数0.05则表示测试集的大小是总量的0.05。该法律法律法律依据返回的5个参数分别是底部形态值的训练集、底部形态值的测试集、要预测目标列的训练集和目标列的测试集。

    第18行的守护进程运行一句话计算了要预测的交易日数,在第19行中构建了另有5个线性回归预测的对象,在第20行是调用fit法律法律法律依据训练底部形态值和目标值的线性关系,请注意这里的训练是针对训练集的,在第22行中,则是用底部形态值的测试集来预测目标值(即收盘价)。也可是说,是用多个交易日的股价来训练lrTool对象,并在此基础上预测后续交易日的收盘价。至此,上边的守护进程运行代码完成了相关的计算工作。

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

50   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行的守护进程运行一句话把df中表示测试结果的predictedVal列设置成相应的预测结果,并肩也在第34行的守护进程运行一句话逐行设置了每条记录中的日期。

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=50)

46   # 带网格线,且设置了网格样式

47   plt.grid(line)

48   plt.show()

    在完成数据计算和数据组装的工作后,从第37行到第48行守护进程运行代码的最后,实现了可视化。

    第38行和第39行的守护进程运行代码分别绘制了预测股价和真实收盘价,在绘制的可是设置了不同的颜色,也设置了不同的label标签值,在第40行通过调用legend法律法律法律依据,根据收盘价和预测股价的标签值,绘制了相应的图例。

    从第42行到第45行设置了x轴显示的标签文字是日期,为了不必标签文字显示过密,设置了“每10个日期里只显示另有5个”的显示法律法律法律依据,可是在第47行设置了网格线的效果,最后在第48行通过调用show法律法律法律依据绘制出整个图形。运行本范例守护进程运行,即可想看 如图所示的结果。

     从图中可不并能看出,蓝线表示真实的收盘价(图中完整性的线),红线表示预测股价(图中靠右边的线。可是本书黑白印刷的原应,在书中读者看只能暗蓝色和红色,请读者在另一方的计算机上运行这人范例守护进程运行即可想看 红蓝两色的线)。随便说说预测股价和真实价之间有差距,但涨跌的趋势大致相同。可是在预测时没有 考虑到涨跌停的因素,可是预测结果的涨跌幅度比真实数据要大。

5 系列文总结和版权说明

    本文是给守护进程运行员加财商系列,可是的系列文如下:

    本文力争做到完整性,比如代码按行编号,并针对行号完整性解释,且图文并茂,可是可是亲戚亲戚或多或少人感觉可不并能,请尽量帮忙推荐一下。本文的内容即将出书,在出版的书里,是用股票案例和亲戚亲戚或多或少人讲述Python入门时的知识点,敬请期待。    

    有不少日本日本男友见面转载和可是转载我的博文,另一方感到十分荣幸,这也是另一方不断写博文的动力。关于本文的版权有如下统一的说明,抱歉就不逐一回复了。

    1 本文可转载,不必告知,转载时请用链接的法律法律法律依据,给出原文出处,别简单地通过文本法律法律法律依据给出,并肩写明原作者是hsm_computer。

    2 在转载时,请原文转载 ,谢绝洗稿。可是另一方保留追究法律责任的权利。

猜你喜欢

大发10分彩漏洞_华为终端云服务赋能荣耀智慧屏,携手开发者打造全场景智慧生态

8月10日大发10分彩漏洞,搭载华为鸿蒙系统的首款终端产品——荣耀智慧网屏,在东莞篮球中心震撼大发10分彩漏洞发布。荣耀智慧网屏凭借大发10分彩漏洞出色的硬件配置、丰富的影音内

2020-04-06

3分飞艇套路_ 想要排毒养颜 每天只需做3件事

人体每天都在进食,这种 过程是获取营养的过程,一齐也是体内毒素产生的途径。而当体内的毒素不到及时被排出体外,则3分飞艇套路会严重损害健康和美丽。时候,对于每有有一个多 愿意

2020-04-06

大发快三手机版_2019Q1农村电商报告:Q1市场规模超4000亿元

市场下沉趋势下,农村电商这块待深入开垦的沃土吸引大发快三手机版了阿里、京东、苏宁等互联网大佬的投入布局;政策上也持续利好信号,20大发快三手机版19中央一号文件再次聚焦三农,提

2020-04-06

幸运时时彩棋牌_Counterpoint报告出炉:一加斩获2018全年印度高端手机市场销量第一

1月30日,市场调研机构C幸运时时彩棋牌ounterpoint发布了2018年幸运时时彩棋牌印度高端智能手机市场报告。数据显示,受益于持续的强势市场表现,一加成为2018年印度

2020-04-06

快3腾讯app_男人身体一物竟致习惯性流产(1)

快3腾讯app怀孕对于2个 孕妈妈来说是一件非常幸福的事情,快3腾讯app原因分析分析在孕期的完后 跳出流快3腾讯app产的疑问语句,对于健康的伤害是很大的。大伙快3腾讯a

2020-04-06