IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]多元线性回归

    caimouse发表于 2017-03-04 14:34:14
    love 0
    多元线性回归的基本原理和基本计算过程与一元线性回归相同,但由于自变量个数多,计算相当麻烦,一般在实际中应用时都要借助统计软件。介绍多元线性回归的一些基本问题。但由于各个自变量的单位可能不一样,比如说一个消费水平的关系式中,工资水平、受教育程度、职业、地区、家庭负担等等因素都会影响到消费水平,而这些影响因素(自变量)的单位显然是不同的,因此自变量前系数的大小并不能说明该因素的重要程度,更简单地来说,同样工资收入,如果用元为单位就比用百元为单位所得的回归系数要小,但是工资水平对消费的影响程度并没有变,所以得想办法将各个自变量化到统一的单位上来。前面学到的标准分就有这个功能,具体到这里来说,就是将所有变量包括因变量都先转化为标准分,再进行线性回归,此时得到的回归系数就能反映对应自变量的重要程度。这时的回归方程称为标准回归方程,回归系数称为标准回归系数,表示如下:

    Zy= β1Z*1 + β2Z*2 + … + βkZ*k

    多元线性方程,一般采用矩阵来表示,因此在求多元线性方程的最小化函数时,就需要对矩阵进行求导,这个求导过程,NG已经给出了,如下:



    最终求出来的公式如下:


    这个公式也叫正规方程,它需要求解矩阵,所以数据比较多时,就比较慢。下面来给出一个计算简单线性回归的矩阵求法,假如数据:

    (1,6), (2,5),(3,7)和(4, 10)

    计算代码如下:

    import numpy as np
    import matplotlib.pyplot as plt
    input = np.array([
        [1, 6],
        [2, 5],
        [3, 7],
        [4, 10]
    ])
    m = len(input)
    X = np.array([np.ones(m), input[:, 0]]).T
    y = np.array(input[:, 1]).reshape(-1, 1)
    betaHat = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
    print(betaHat)
    
    plt.figure(1)
    xx = np.linspace(0, 5, 2)
    yy = np.array(betaHat[0] + betaHat[1] * xx)
    plt.plot(xx, yy.T, color='b')
    plt.scatter(input[:, 0], input[:, 1], color='r')
    plt.show()

    输出结果:



    可见矩阵计算方法比较快,不需要迭代,一步就可以计算出来。


    1. C++标准模板库从入门到精通 

    http://edu.csdn.net/course/detail/3324

    2.跟老菜鸟学C++

    http://edu.csdn.net/course/detail/2901

    3. 跟老菜鸟学python

    http://edu.csdn.net/course/detail/2592

    4. 在VC2015里学会使用tinyxml库

    http://edu.csdn.net/course/detail/2590

    5. 在Windows下SVN的版本管理与实战 

     http://edu.csdn.net/course/detail/2579

    6.Visual Studio 2015开发C++程序的基本使用 

    http://edu.csdn.net/course/detail/2570

    7.在VC2015里使用protobuf协议

    http://edu.csdn.net/course/detail/2582

    8.在VC2015里学会使用MySQL数据库

    http://edu.csdn.net/course/detail/2672



沪ICP备19023445号-2号
友情链接