zoukankan      html  css  js  c++  java
  • python求线性回归斜率

    一、 先说我对这个题目的理解

    直线的x,y方程是这样的:y = kx+b, k就是斜率.

    求线性回归斜率, 就是说
    有这么一组(x, y)的对应值——样本。如果有四组,就说样本量是4.
    根据这些样本,做“线性回归”,最终求出一条直线(即y = kx + b的k值和b值),使得样本里的各个点(x, y) “尽可能的”落到直线(或者直线附近)上。

    二、 python解题需要安装的包

    实际解题主要用到的python库是pandas. 解题算法是“最小二乘法”,这用到了pandas的ols函数。

    我的系统是ubuntu14.04.

    实际实验过程如下:

    $ sudo pip install numpy
    $ sudo pip install pandas

    安装pandas的依赖包(使用pandas.ols函数就必须安装这个依赖包):
    $ sudo pip install statsmodels

    如果发现安装失败,则需要安装系统依赖库先:
    在http://www.netlib.org/lapack/ 下载lapack-3.6.0的包,然后:
    $ cd lapack-3.6.0
    $ mv make.inc.example make.inc
    $ sudo apt-get install gfortran
    把makefile文件中的:
    lib: lapacklib tmglib
    改为:
    lib: blaslib variants lapacklib tmglib
    $ sudo make
    $ sudo cp lib*.a /usr/lib
    以上依然不行,然而,'可能'只需要下面两个命令:
    $ sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran
    $ sudo pip install statsmodels (安装时间有点长...)
    过了.


    三、 python解题

    $ ipython
    > import numpy as np
    import pandas as pd
    x = np.array([2,3,4,6])
    xx = pd.DataFrame({"k": x})
    yy = pd.Series([22,33,44,66])   # 口算都知道斜率是11,最终方程是y=11x
    res = pd.ols(y=yy, x=xx)           
    res

    -------------------------Summary of Regression Analysis-------------------------

    Formula: Y ~ <k> + <intercept>

    Number of Observations: 4
    Number of Degrees of Freedom: 2

    R-squared: 1.0000
    Adj R-squared: 1.0000

    Rmse: 0.0000

    F-stat (1, 2): inf, p-value: 0.0000

    Degrees of Freedom: model 1, resid 2

    -----------------------Summary of Estimated Coefficients------------------------
    Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
    --------------------------------------------------------------------------------
    k 11.0000 0.0000 1404889085527666.75 0.0000 11.0000 11.0000
    intercept -0.0000 0.0000 -0.68 0.5691 -0.0000 0.0000
    ---------------------------------End of Summary---------------------------------

    可以看出,直线方程就是这样的:y = 11x - 0  (就是最左边的一列值作为k和b)

    可以直接读取beta,关注每个系数:
    res.beta

    k 1.100000e+01
    intercept -2.131628e-14
    dtype: float64

    res.beta[0]       # <--------- 斜率

    (试试把上面样本里x最后一个改为7,即x = np.array([2,3,4,7]))

    四、 end

     参考资料:
    http://www.cnblogs.com/fangwenyu/p/4284523.html

  • 相关阅读:
    maven项目打ZIP包
    springBoot文档地址
    延迟队列DelayQueue
    图片处理依赖
    java模板引擎替换代码
    redisson笔记
    linux 自动备份脚本
    shell 远程备份日志
    amqp事务
    redis 事务
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/5173083.html
Copyright © 2011-2022 走看看