当前位置:首页 » 价格知识 » 线性回归预测股票价格的python代码
扩展阅读
佛塑科技股票价 2025-06-19 13:57:37
股票交易员最高年龄 2025-06-19 13:38:52
bunge公司股票代码 2025-06-19 13:00:09

线性回归预测股票价格的python代码

发布时间: 2021-04-29 00:12:27

1. 如何利用Python预测股票价格

预测股票价格没有意义。
单支股票价格,多股组合,大盘这些都可以使用神经网络来学习,02年就做过了,涨跌预测平均能达到54%到57%的准确率,但是只能定性,无法定量,因此,在扣除印花税之后无利可图。

纯粹使用股票交易数据来预测并保证总体获利不是程序能办到的,人也办不到。
目前世界上最先进的炒股机器也只能利用网络时差那微不可计的零点几秒在欧洲与美国证券间倒来倒去,那套系统研发费用数千万,硬件(主要是独立光缆)费用以亿计。

2. python 线性回归 样本外效果预测

看起来你可能在做股票方面的回测。
你自己写个函数比较预测值和样本外的实际值的偏差不行吗?应该比较方便吧

3. 有没有会用Python编写一个简单的建模股票价格的小程序能够对股票数据进行简单预测即可!求助!

虽然懂python 但是不懂股票,
采用random()可以么,哈哈

4. 用python写的计算线性回归方程的代码,提示list index out of range,怎么破

……真讨厌用截图的。复制都不行
range(1,lu)
从零开始的
而且也没必要lu = l+1

5. python多元线性回归怎么计算

1、什么是多元线性回归模型?

当y值的影响因素不唯一时,采用多元线性回归模型。

y =y=β0+β1x1+β2x2+...+βnxn

例如商品的销售额可能不电视广告投入,收音机广告投入,报纸广告投入有关系,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.

2、使用pandas来读取数据

pandas 是一个用于数据探索、数据分析和数据处理的python库

[python]view plain

  • importpandasaspd

  • [html]view plain

  • <prename="code"class="python">#

  • data=pd.read_csv('/home/lulei/Advertising.csv')

  • #displaythefirst5rows

  • data.head()




  • 上面代码的运行结果:

  • TV Radio Newspaper Sales

  • 0 230.1 37.8 69.2 22.1

  • 1 44.5 39.3 45.1 10.4

  • 2 17.2 45.9 69.3 9.3

  • 3 151.5 41.3 58.5 18.5

  • 4 180.8 10.8 58.4 12.9

  • 上面显示的结果类似一个电子表格,这个结构称为Pandas的数据帧(data frame),类型全称:pandas.core.frame.DataFrame.

    pandas的两个主要数据结构:Series和DataFrame:

  • Series类似于一维数组,它有一组数据以及一组与之相关的数据标签(即索引)组成。

  • DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典。

  • [python]view plain

  • #displaythelast5rows

  • data.tail()

  • 只显示结果的末尾5行

  • TV Radio Newspaper Sales

  • 195 38.2 3.7 13.8 7.6

  • 196 94.2 4.9 8.1 9.7

  • 197 177.0 9.3 6.4 12.8

  • 198 283.6 42.0 66.2 25.5

  • 199 232.1 8.6 8.7 13.4

  • [html]view plain

  • #checktheshapeoftheDataFrame(rows,colums)

  • data.shape

  • 查看DataFrame的形状,注意第一列的叫索引,和数据库某个表中的第一列类似。

    (200,4)

    3、分析数据

    特征:

  • TV:对于一个给定市场中单一产品,用于电视上的广告费用(以千为单位)

  • Radio:在广播媒体上投资的广告费用

  • Newspaper:用于报纸媒体的广告费用

  • 响应:

  • Sales:对应产品的销量

  • 在这个案例中,我们通过不同的广告投入,预测产品销量。因为响应变量是一个连续的值,所以这个问题是一个回归问题。数据集一共有200个观测值,每一组观测对应一个市场的情况。

    注意:这里推荐使用的是seaborn包。网上说这个包的数据可视化效果比较好看。其实seaborn也应该属于matplotlib的内部包。只是需要再次的单独安装。

    [python]view plain

  • importseabornassns

  • importmatplotlib.pyplotasplt

  • #ots

  • sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8)

  • plt.show()#注意必须加上这一句,否则无法显示。

  • [html]view plain

  • 这里选择TV、Radio、Newspaper作为特征,Sales作为观测值

  • [html]view plain

  • 返回的结果:



  • seaborn的pairplot函数绘制X的每一维度和对应Y的散点图。通过设置size和aspect参数来调节显示的大小和比例。可以从图中看出,TV特征和销量是有比较强的线性关系的,而Radio和Sales线性关系弱一些,Newspaper和Sales线性关系更弱。通过加入一个参数kind='reg',seaborn可以添加一条最佳拟合直线和95%的置信带。

  • [python]view plain

  • sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8,kind='reg')

  • plt.show()


  • 结果显示如下:


    4、线性回归模型

    优点:快速;没有调节参数;可轻易解释;可理解。

    缺点:相比其他复杂一些的模型,其预测准确率不是太高,因为它假设特征和响应之间存在确定的线性关系,这种假设对于非线性的关系,线性回归模型显然不能很好的对这种数据建模。

    线性模型表达式:y=β0+β1x1+β2x2+...+βnxn其中

  • y是响应

  • β0是截距

  • β1是x1的系数,以此类推

  • 在这个案例中:y=β0+β1∗TV+β2∗Radio+...+βn∗Newspaper

    (1)、使用pandas来构建X(特征向量)和y(标签列)

    scikit-learn要求X是一个特征矩阵,y是一个NumPy向量。

    pandas构建在NumPy之上。

    因此,X可以是pandas的DataFrame,y可以是pandas的Series,scikit-learn可以理解这种结构。

    [python]view plain

  • #

  • feature_cols=['TV','Radio','Newspaper']

  • #

  • X=data[feature_cols]

  • #

  • X=data[['TV','Radio','Newspaper']]

  • #printthefirst5rows

  • printX.head()

  • #checkthetypeandshapeofX

  • printtype(X)

  • printX.shape

  • 输出结果如下:

  • TV Radio Newspaper

  • 0 230.1 37.8 69.2

  • 1 44.5 39.3 45.1

  • 2 17.2 45.9 69.3

  • 3 151.5 41.3 58.5

  • 4 180.8 10.8 58.4

  • <class 'pandas.core.frame.DataFrame'>

  • (200, 3)


  • [python]view plain

  • #selectaSeriesfromtheDataFrame

  • y=data['Sales']

  • #

  • y=data.Sales

  • #printthefirst5values

  • printy.head()

  • 输出的结果如下:

  • 0 22.1

  • 1 10.4

  • 2 9.3

  • 3 18.5

  • 4 12.9

  • Name: Sales

  • (2)、构建训练集与测试集

    [html]view plain

  • <prename="code"class="python"><spanstyle="font-size:14px;">##构造训练集和测试集

  • fromsklearn.cross_validationimporttrain_test_split#这里是引用了交叉验证

  • X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)




  • #default split is 75% for training and 25% for testing

    [html]view plain

  • printX_train.shape

  • printy_train.shape

  • printX_test.shape

  • printy_test.shape


  • 输出结果如下:

  • (150, 3)

  • (150,)

  • (50, 3)

  • (50,)

  • 注:上面的结果是由train_test_spilit()得到的,但是我不知道为什么我的版本的sklearn包中居然报错:

  • ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <mole>() 1 ###构造训练集和测试集----> 2 from sklearn.cross_validation import train_test_split 3 #import sklearn.cross_validation 4 X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1) 5 # default split is 75% for training and 25% for testingImportError: cannot import name train_test_split

  • 处理方法:1、我后来重新安装sklearn包。再一次调用时就没有错误了。

    2、自己写函数来认为的随机构造训练集和测试集。(这个代码我会在最后附上。)

    (3)sklearn的线性回归

    [html]view plain

  • fromsklearn.linear_modelimportLinearRegression

  • linreg=LinearRegression()

  • model=linreg.fit(X_train,y_train)

  • printmodel

  • printlinreg.intercept_

  • printlinreg.coef_


  • 输出的结果如下:

  • LinearRegression(_X=True, fit_intercept=True, normalize=False)

  • 2.66816623043

  • [ 0.04641001 0.19272538 -0.00349015]

  • [html]view plain

  • #

  • zip(feature_cols,linreg.coef_)

  • 输出如下:

  • [('TV', 0.046410010869663267),

  • ('Radio', 0.19272538367491721),

  • ('Newspaper', -0.0034901506098328305)]



  • y=2.668+0.0464∗TV+0.192∗Radio-0.00349∗Newspaper
    如何解释各个特征对应的系数的意义?

    对于给定了Radio和Newspaper的广告投入,如果在TV广告上每多投入1个单位,对应销量将增加0.0466个单位。就是加入其它两个媒体投入固定,在TV广告上每增加1000美元(因为单位是1000美元),销量将增加46.6(因为单位是1000)。但是大家注意这里的newspaper的系数居然是负数,所以我们可以考虑不使用newspaper这个特征。这是后话,后面会提到的。

    (4)、预测

    [python]view plain

  • y_pred=linreg.predict(X_test)

  • printy_pred

  • [python]view plain

  • printtype(y_pred)


  • 输出结果如下:


  • [ 14.58678373 7.92397999 16.9497993 19.35791038 7.36360284

  • 7.35359269 16.08342325 9.3046 20.35507374 12.63160058

  • 22.83356472 9.66291461 4.18055603 13.70368584 11.4533557

  • 4.16940565 10.31271413 23.06786868 17.80464565 14.53070132

  • 15.19656684 14.22969609 7.54691167 13.47210324 15.00625898

  • 19.28532444 20.7319878 19.70408833 18.21640853 8.50112687

  • 9.8493781 9.51425763 9.73270043 18.13782015 15.41731544

  • 5.07416787 12.20575251 14.05507493 10.6699926 7.16006245

  • 11.80728836 24.79748121 10.40809168 24.05228404 18.44737314

  • 20.80572631 9.45424805 17.00481708 5.78634105 5.10594849]

  • <type 'numpy.ndarray'>

  • 5、回归问题的评价测度

    (1) 评价测度

    对于分类问题,评价测度是准确率,但这种方法不适用于回归问题。我们使用针对连续数值的评价测度(evaluation metrics)。
    这里介绍3种常用的针对线性回归的测度。

    1)平均绝对误差(Mean Absolute Error, MAE)

    (2)均方误差(Mean Squared Error, MSE)

    (3)均方根误差(Root Mean Squared Error, RMSE)

    这里我使用RMES。

    [python]view plain

  • <prename="code"class="python">#计算Sales预测的RMSE

  • printtype(y_pred),type(y_test)

  • printlen(y_pred),len(y_test)

  • printy_pred.shape,y_test.shape

  • fromsklearnimportmetrics

  • importnumpyasnp

  • sum_mean=0

  • foriinrange(len(y_pred)):

  • sum_mean+=(y_pred[i]-y_test.values[i])**2

  • sum_erro=np.sqrt(sum_mean/50)

  • #calculateRMSEbyhand

  • print"RMSEbyhand:",sum_erro


  • 最后的结果如下:

  • <type 'numpy.ndarray'> <class 'pandas.core.series.Series'>

  • 50 50

  • (50,) (50,)

  • RMSE by hand: 1.42998147691

  • (2)做ROC曲线

    [python]view plain

  • importmatplotlib.pyplotasplt

  • plt.figure()

  • plt.plot(range(len(y_pred)),y_pred,'b',label="predict")

  • plt.plot(range(len(y_pred)),y_test,'r',label="test")

  • plt.legend(loc="upperright")#显示图中的标签

  • plt.xlabel("thenumberofsales")

  • plt.ylabel('valueofsales')

  • plt.show()


  • 显示结果如下:(红色的线是真实的值曲线,蓝色的是预测值曲线)

    直到这里整个的一次多元线性回归的预测就结束了。

    6、改进特征的选择
    在之前展示的数据中,我们看到Newspaper和销量之间的线性关系竟是负关系(不用惊讶,这是随机特征抽样的结果。换一批抽样的数据就可能为正了),现在我们移除这个特征,看看线性回归预测的结果的RMSE如何?

    依然使用我上面的代码,但只需修改下面代码中的一句即可:

    [python]view plain

  • #

  • feature_cols=['TV','Radio','Newspaper']

  • #

  • X=data[feature_cols]

  • #

  • #X=data[['TV','Radio','Newspaper']]#只需修改这里即可<prename="code"class="python"style="font-size:15px;line-height:35px;">X=data[['TV','Radio']]#去掉newspaper其他的代码不变

  • # print the first 5 rowsprint X.head()# check the type and shape of Xprint type(X)print X.shape


    最后的到的系数与测度如下:

    LinearRegression(_X=True, fit_intercept=True, normalize=False)

  • 2.81843904823

  • [ 0.04588771 0.18721008]

  • RMSE by hand: 1.28208957507

  • 然后再次使用ROC曲线来观测曲线的整体情况。我们在将Newspaper这个特征移除之后,得到RMSE变小了,说明Newspaper特征可能不适合作为预测销量的特征,于是,我们得到了新的模型。我们还可以通过不同的特征组合得到新的模型,看看最终的误差是如何的。

    备注:

    之前我提到了这种错误:

    注:上面的结果是由train_test_spilit()得到的,但是我不知道为什么我的版本的sklearn包中居然报错:

  • ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <mole>() 1 ###构造训练集和测试集----> 2 from sklearn.cross_validation import train_test_split 3 #import sklearn.cross_validation 4 X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1) 5 # default split is 75% for training and 25% for testingImportError: cannot import name train_test_split

  • 处理方法:1、我后来重新安装sklearn包。再一次调用时就没有错误了。

    2、自己写函数来认为的随机构造训练集和测试集。(这个代码我会在最后附上。)

    这里我给出我自己写的函数:

6. python线性回归有哪些方法

线性回归:
设x,y分别为一组数据,代码如下
import matplotlib.pyplot as plt
import numpy as np
ro=np.polyfit(x,y,deg=1) #deg为拟合的多项式的次数(线性回归就选1)
ry=np.polyval(ro,x) #忘记x和ro哪个在前哪个在后了。。。
print ro #输出的第一个数是斜率k,第二个数是纵截距b
plt.scatter(x,y)
plt.plot(x,ry)

7. Python 关于两个股票线性回归的 求教

你好:上面的程序,请看如下代码:#-*-coding:cp936-*-end=input("是否结束(y/n):")whileend=="n":print"Numberofcoordinates:2"xx=input("x's:")yy=input("y's:")a=float(list(xx)[0])b=float(list(xx)[1])c=float(list(yy

8. 如何用python做回归 判断这个股票和股指间的关系

一个大项目的完成不是楼主以为的一天就能完成,通常会延续一年月乃至数年,看当时的风有多大了。所以去深究一天的盘口意义不是特别大。
大作手如果对大的基本面判断失误,筹码、发动时机控制不好,锁筹小伙伴背后捅刀子,走水出现大的老鼠仓,资金链出问题,碰到其他有钱任性的机构,老婆偷人枪杀儿子导致脑子短路等等鸡飞狗跳的事情,项目做折掉,从庄家变股东的可能性也是非常大的,以亿计的现金灰飞烟灭不过分分钟的事情。
===============================================================
A股的死穴——要赚钱必须涨,做多是唯一出路。
做庄的基本原理:比如5元的标的,在底部拿够筹码,配合风信,能做多高做多高,比如做到50块,然后就一路压低卖下来,卖到15块,乃至10块。总有人觉得够
便宜了会要的。
===============================================================
步骤1:做底仓,一般是先买到流通盘的30%。
具体做法就是在熊市末期,对着往上敲,然后亏本往下砸。卖1个,跟着会掉下来2-3个,接住。做底吸筹这个时间段有时会很长,视实际筹码的收集情况和大盘走势而定。
看下图成交量,主力第一注就是下在中间偏左点的位置,进而不断往震荡吸筹。那么大的成交量,你总不会觉得是公众交易者干出来的吧。
tip:标准底部的特征就是脉冲式放量缩量,公众交易者不参与任何震荡,切记。底部持续时间越长,筹码控制越集中,以后上涨的高度越高,即所谓的横有多长竖有多高。同时尽量挑选底部形态比较标准的标的,一年时间跨度以上的大圆弧底、复合头肩、矩形底最好。越漂亮的走势图形控盘度越高,筹码散乱的状态下往往代表着多方博弈。