求解线性回归系数

已知nnn个观测值集合{(xi,yi),i=1,2,...,n}\{(x_i, y_i), i=1,2,...,n\}{(xi​,yi​),i=1,2,...,n}, 求回归系数aaa,使得预测值y^i=xia\hat{y}_i={x_ia}y^​i​=xi​a与真实值yiy_iyi​的偏差平方和最小,即找目标函数s=∑(yi−y^)2s=\sum(y_i - \hat{y})^2s=∑(yi​−y^​)2的最小值。

  • 当为一元线性回归,则yi=xi0∗a0+xi1∗a1y_i = x_{i0}*a_0 + x_{i1}*a_1yi​=xi0​∗a0​+xi1​∗a1​,这里x0ix_{0i}x0i​恒等于1,那么a0a_0a0​可看作为偏移量常数(截距);
  • 当为多元(mmm元)线性回归时,xi,aix_i,a_ixi​,ai​为向量,令xi=(xi0,xi1,xi2,...,xim)T\boldsymbol{x_i}= (x_{i0}, x_{i1}, x_{i2},...,x_{im})^Txi​=(xi0​,xi1​,xi2​,...,xim​)T, a=(a0,a1,a2,...,am)T\boldsymbol{a} = (a_{0}, a_{1}, a_{2},...,a_{m})^Ta=(a0​,a1​,a2​,...,am​)T, 则yi=∑j=0mxijai=xiTa{y_i}=\sum_{j=0}^m{x_{ij}a_i} =\boldsymbol{x_i}^T\boldsymbol{a}yi​=∑j=0m​xij​ai​=xi​Ta.

因此,目标函数s\boldsymbol{s}s可用矩阵形式表示:
s(a)=∑i=1n(yi−xiTa)2=(y−XTa)T(y−XTa),\boldsymbol{s}(\boldsymbol{a})=\sum_{i=1}^n{({y_i}-\boldsymbol{x_i}^T\boldsymbol{a})^2} =(\boldsymbol{y} - \boldsymbol{X}^T\boldsymbol{a})^T (\boldsymbol{y} - \boldsymbol{X}^T\boldsymbol{a}),s(a)=i=1∑n​(yi​−xi​Ta)2=(y−XTa)T(y−XTa),

其中,X=(x1,x2,...,xn)T\boldsymbol{X}=(\boldsymbol{x_{1},x_{2},...,x_{n}})^TX=(x1​,x2​,...,xn​)T, y=(y1,y2,...,yn)T\boldsymbol{y}=(y_1,y_2,...,y_n)^Ty=(y1​,y2​,...,yn​)T.

求s\boldsymbol{s}s的最小值,则可对目标函数s\boldsymbol{s}s求导,令u=y−XTa\boldsymbol{u} = \boldsymbol{y} - \boldsymbol{X}^T\boldsymbol{a}u=y−XTa:
s′(a)=(uTu)′=uTu′+uTu′=2uT(−XT)=−2(Xu)T.\boldsymbol{s}'(\boldsymbol{a}) = (\boldsymbol{u}^T\boldsymbol{u})' =\boldsymbol{u}^T\boldsymbol{u}'+\boldsymbol{u}^T\boldsymbol{u}'=2\boldsymbol{u}^T(-\boldsymbol{X}^T)=-2(\boldsymbol{X}\boldsymbol{u})^T.s′(a)=(uTu)′=uTu′+uTu′=2uT(−XT)=−2(Xu)T.

【标量对向量求导:(uTv)′=uTv′+vTu′(u^Tv)'=u^Tv'+v^Tu'(uTv)′=uTv′+vTu′】(u(x): nx1, v(x):nx1)

令s′(a)=0\boldsymbol{s}'(\boldsymbol{a})=0s′(a)=0,即(X(y−XTa))T=0(\boldsymbol{X} ( \boldsymbol{y} - \boldsymbol{X}^T\boldsymbol{a}))^T=0(X(y−XTa))T=0,解得 a^=(XXT)−1Xy\hat{\boldsymbol{a}}=(\boldsymbol{XX}^T)^{-1}\boldsymbol{X}\boldsymbol{y}a^=(XXT)−1Xy。 注意到,a^\hat{\boldsymbol{a}}a^的解中包含矩阵的逆,也就是说,只有当X−1\boldsymbol{X}^{-1}X−1存在时,a^\hat{\boldsymbol{a}}a^才有解。

上述方法求解回归系数是一般最小二乘法(ordinaryleastquaresordinary\ least\ quaresordinary least quares, OLS

python实现

python中numpy中包含线性代数模块(linalg, linear algebra)可用于求解ax=b\boldsymbol{ax=b}ax=b。

  • 一、导入数据

    from numpy import *
    import pandas as pd
    stu_score = '{mydata_path}/data.tsv'
    dataset = pd.read_csv(stu_score, index_col=False)
    dataset.head()
    len(dataset)
    

  • 二、数据转化为矩阵,并计算回归系数

    def load_data(data_file):data_arr = []label_arr = []with open(data_file, 'r') as f:header = f.readline()for line in f:mydata = line.strip().split(',')mydata.insert(0, 1)  # 假定偏移量是常数c,第一列补1(y = ax + c)data_info = [float(i) for i in mydata]data_arr.append(data_info[:-1])label_arr.append([data_info[-1]])  # 最后一列为对应y值return mat(data_arr), mat(label_arr)def stand_regres(x_mat, y_mat):x_mat_T = x_mat.T * x_mat # 下面判断x_mat_T是否可逆if linalg.det(x_mat_T) == 0:  # 若行列式|x_mat_T|不为0,则A可逆print('This matrix is singular, cannot do inverse!')  # 行列式为0return Noneelse:# reg_coef = x_mat_T.I * (x_mat.T * y_mat)  # 可根据上面推到得到回归系数,reg_coef = linalg.solve(x_mat_T, x_mat.T * y_mat)  # 也可根据numpy中linalg模块中solve方法解ax + b = 0得到回归系数return reg_coef
    
  • 三、数据可视化

    import matplotlib.pyplot as pltx_mat, y_mat = load_data(stu_score)  # header
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(x_mat[:,1].flatten().A[0], y_mat[:,0].flatten().A[0])  # plot scatter of original dataregress_coef = stand_regres(x_mat, y_mat)
    x_copy = x_mat.copy()
    y_hat = x_copy * regress_coef
    ax.plot(x_copy[:,1], y_hat)  # plot regression line
    plt.show()
    

  • 四、拟合直线的相关系数

    corrcoef(y_hat.T, y_mat.T)
    


    附:相关系数计算公式:
    Corr(X,Y)=Cov(X,Y)Var(X)Var(Y),Corr(X,Y) = \frac{Cov(X,Y)}{\sqrt{Var(X)}\sqrt{Var(Y)}},Corr(X,Y)=Var(X)​Var(Y)​Cov(X,Y)​,
    其中,

    • 协方差 Cov(X,Y)=E(XY)−E(X)E(Y)Cov(X,Y)=E(XY) - E(X)E(Y)Cov(X,Y)=E(XY)−E(X)E(Y)
    • Var(X),Var(Y)Var(X), Var(Y)Var(X),Var(Y)分别为X,YX,YX,Y的方差
    • E(X),E(Y),E(XY)E(X), E(Y), E(XY)E(X),E(Y),E(XY)分别为对用期望
    • 协方差>0,则X与Y正相关;协方差<0,则负相关;协方差=0,则独立/不相关;同样相关系数与协方差同符号(同正负零),相关系数反应X,YX,YX,Y的相关程度,其取值范围是−1&lt;Corr(X,Y)&lt;1-1&lt;Corr(X, Y) &lt; 1−1<Corr(X,Y)<1, 即0<|Corr(X, Y)|<1,|Corr(X, Y)|的值越接近1,相关程度越高,反之,相关程度越低。

线性回归系数求解及Python实现相关推荐

  1. 多元线性回归系数求解

    做地图自动标注,想调用Matlab的多元线性拟合函数Regress,用Matlab Builder For Java转成Java类,因为是Flex编写的程序,无法直接使用Java需要部署到Web,问题 ...

  2. 线性回归系数的几个性质

    线性回归系数的几个性质 摘要 线性回归问题的描述 单变量线性回归系数的公式 无偏估计 线性回归系数的方差 其余的几个性质 残差项之和为0 线性拟合直线总会经过 (xˉ,yˉ)(\bar{x}, \ba ...

  3. JAVA:实现线性丢番图方程求解器算法(附完整源码)

    JAVA:实现线性丢番图方程求解器算法 package com.thealgorithms.maths;import java.util.Objects;public final class Line ...

  4. 三硬币问题建模及Gibbs采样求解(Python实现)

    大纲 三硬币问题建模及Gibbs采样求解(Python实现) 三硬币问题 二项分布与Beta分布 基础概念 二项分布 Beta分布 二项分布-Beta分布 三硬币问题建模过程 Gibbs 采样求解 p ...

  5. python 字典处理_python numpy求解积分python中的字典操作及字典函数

    字典 dict_fruit = {'apple':'苹果','banana':'香蕉','cherry':'樱桃','avocado':'牛油果','watermelon':'西瓜'} 字典的操作 W ...

  6. 大M法的python编程求解和python包求解

    大M法的python编程求解和python包求解 一.大M算法的求解步骤讲解 二.python编程求解 三.利用python包scipy的优化包optimize 四.用excel求解 五.分析结果 一 ...

  7. 杂文笔记(三):CSI的线性相位去噪及其python实现

    目录 1. CSI相位信息 2. 线性相位去噪(两步:解卷绕+线性变换) 3. 相位校准效果 4. CSI线性相位去噪的python实现 1. CSI相位信息   测量到的第i个子载波上的CSI相位信 ...

  8. 线性与非线性规划——单纯形法python实现

    线性与非线性规划--单纯形法python实现 单纯形法原理及python实现,时间:2022/1/11   本文不对单纯形方法进行讲解,若有需要请参照<最优化理论与算法第二版>(陈宝林著) ...

  9. 旋转矩阵求解欧拉角Python实现

    旋转矩阵求解欧拉角Python实现 基本知识 绕静系与动系旋转 静系动系与左乘右乘 旋转矩阵连乘的两种理解 文件目录 实现方式 使用矩阵方程手动求解 SCIPY库求解 在线计算网站 总结 笔者在外实习 ...

最新文章

  1. [Python]Python操作/管理Mysql学习(一)
  2. TCP/IP 协议栈及 OSI 参考模型详解--云平台技术栈04
  3. 一文梳理缺陷检测方法
  4. 怎么从github上下载一个vue项目在本地运行
  5. Spring MVC中handlerMapping的设计
  6. Flask的闪现(message) 请求扩展 中间件 蓝图
  7. 深解微服务架构:从过去,到未来
  8. SQL Server 关联
  9. python高级函数、将函数作为变量、返回函数_从函数外部返回变量名,作为python函数内部的字符串...
  10. linux-优化内核参数 /etc/sysctl.conf
  11. 数据库驱动和数据库连接(MySQL)
  12. android获取机器码,Android平台获取设备SN的说明
  13. 我的世界服务器无法发送聊天信息,我的世界聊天框指令传送 | 手游网游页游攻略大全...
  14. 微信小程序 | 一键生成万圣节头像框工具
  15. 计算机基础知识学习题,超全的计算机基础知识题库【精心整理_完全免费】.pdf...
  16. 【校招VIP】产品项目分析之优势或不足
  17. JavaScript 实现碰壁反弹
  18. 一位清华计算机专业的学生怎么看LINUX与WINDOWS
  19. JS中的分支语句和循环语句
  20. HBase微博实战案例

热门文章

  1. 百度地图坐标拾取系统html,请问百度地图拾取坐标系统中的这个效果是怎么实现的?...
  2. Uva140 Bandwidth 全排列+生成测试法+剪枝
  3. Python之析构方法
  4. Java开发者福音,阿里巴巴宣布连任Java全球管理组织席位!
  5. box-shadow实现四周阴影
  6. 将U盘文件系统转换为NTFS
  7. 《抖音小店无货源项目玩法特训》线上第九期
  8. 识别“数据陷阱”,发现数据的可疑之处
  9. intellij idea设置默认工作目录
  10. 让IE浏览器打开时默认最大化