线性回归系数求解及Python实现_python 回归系数-程序员宅基地

技术标签: python  机器学习  线性回归  

求解线性回归系数

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

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

因此,目标函数 s \boldsymbol{s} s可用矩阵形式表示:
s ( a ) = ∑ i = 1 n ( y i − x i T a ) 2 = ( y − X T a ) T ( y − X T a ) , \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=1n(yixiTa)2=(yXTa)T(yXTa),

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

s \boldsymbol{s} s的最小值,则可对目标函数 s \boldsymbol{s} s求导,令 u = y − X T a \boldsymbol{u} = \boldsymbol{y} - \boldsymbol{X}^T\boldsymbol{a} u=yXTa
s ′ ( a ) = ( u T u ) ′ = u T u ′ + u T u ′ = 2 u T ( − X T ) = − 2 ( X u ) 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.

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

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

上述方法求解回归系数是一般最小二乘法 o r d i n a r y   l e a s t   q u a r e s ordinary\ least\ quares ordinary least quares, OLS

python实现

python中numpy中包含线性代数模块(linalg, linear algebra)可用于求解 a x = 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!')  # 行列式为0
            return None
        else:
            # 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 plt
    
    x_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 data
    
    regress_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)
    

    在这里插入图片描述
    附:相关系数计算公式:
    C o r r ( X , Y ) = C o v ( X , Y ) V a r ( X ) V a r ( Y ) , Corr(X,Y) = \frac{Cov(X,Y)}{\sqrt{Var(X)}\sqrt{Var(Y)}}, Corr(X,Y)=Var(X) Var(Y) Cov(X,Y),
    其中,

    • 协方差 C o v ( X , Y ) = E ( X Y ) − E ( X ) E ( Y ) Cov(X,Y)=E(XY) - E(X)E(Y) Cov(X,Y)=E(XY)E(X)E(Y)
    • V a r ( X ) , V a r ( Y ) Var(X), Var(Y) Var(X),Var(Y)分别为 X , Y X,Y X,Y的方差
    • E ( X ) , E ( Y ) , E ( X Y ) E(X), E(Y), E(XY) E(X),E(Y),E(XY)分别为对用期望
    • 协方差>0,则X与Y正相关;协方差<0,则负相关;协方差=0,则独立/不相关;同样相关系数与协方差同符号(同正负零),相关系数反应 X , Y X,Y X,Y的相关程度,其取值范围是 − 1 &lt; C o r r ( 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,相关程度越高,反之,相关程度越低。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_32872729/article/details/97636884

智能推荐

React学习记录-程序员宅基地

文章浏览阅读936次,点赞22次,收藏26次。React核心基础

Linux查磁盘大小命令,linux系统查看磁盘空间的命令是什么-程序员宅基地

文章浏览阅读2k次。linux系统查看磁盘空间的命令是【df -hl】,该命令可以查看磁盘剩余空间大小。如果要查看每个根路径的分区大小,可以使用【df -h】命令。df命令以磁盘分区为单位查看文件系统。本文操作环境:red hat enterprise linux 6.1系统、thinkpad t480电脑。(学习视频分享:linux视频教程)Linux 查看磁盘空间可以使用 df 和 du 命令。df命令df 以磁..._df -hl

Office & delphi_range[char(96 + acolumn) + inttostr(65536)].end[xl-程序员宅基地

文章浏览阅读923次。uses ComObj;var ExcelApp: OleVariant;implementationprocedure TForm1.Button1Click(Sender: TObject);const // SheetType xlChart = -4109; xlWorksheet = -4167; // WBATemplate xlWBATWorksheet = -4167_range[char(96 + acolumn) + inttostr(65536)].end[xlup]

若依 quartz 定时任务中 service mapper无法注入解决办法_ruoyi-quartz无法引入ruoyi-admin的service-程序员宅基地

文章浏览阅读2.3k次。上图为任务代码,在任务具体执行的方法中使用,一定要写在方法内使用SpringContextUtil.getBean()方法实例化Spring service类下边是ruoyi-quartz模块中util/SpringContextUtil.java(已改写)import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.s..._ruoyi-quartz无法引入ruoyi-admin的service

CentOS7配置yum源-程序员宅基地

文章浏览阅读2w次,点赞10次,收藏77次。yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。可以这么说,yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题。yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装。_centos7配置yum源

智能科学毕设分享(算法) 基于深度学习的抽烟行为检测算法实现(源码分享)-程序员宅基地

文章浏览阅读828次,点赞21次,收藏8次。今天学长向大家分享一个毕业设计项目毕业设计 基于深度学习的抽烟行为检测算法实现(源码分享)毕业设计 深度学习的抽烟行为检测算法实现通过目前应用比较广泛的 Web 开发平台,将模型训练完成的算法模型部署,部署于 Web 平台。并且利用目前流行的前后端技术在该平台进行整合实现运营车辆驾驶员吸烟行为检测系统,方便用户使用。本系统是一种运营车辆驾驶员吸烟行为检测系统,为了降低误检率,对驾驶员视频中的吸烟烟雾和香烟目标分别进行检测,若同时检测到则判定该驾驶员存在吸烟行为。进行流程化处理,以满足用户的需要。

随便推点

STM32单片机示例:多个定时器同步触发启动_stm32 定时器同步-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏14次。多个定时器同步触发启动是一种比较实用的功能,这里将对此做个示例说明。_stm32 定时器同步

android launcher分析和修改10,Android Launcher分析和修改9——Launcher启动APP流程(转载)...-程序员宅基地

文章浏览阅读348次。出处 : http://www.cnblogs.com/mythou/p/3187881.html本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务。客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题。没办法,只能看看是怎么回事。今天分析一下Launcher启动APP的过程。从用户点击到程序启动的流程,下面针对WorkSpa..._回调bubbletextview

Ubuntu 12 最快的两个源 个人感觉 163与cn99最快 ubuntu安装源下包过慢_un.12.cc-程序员宅基地

文章浏览阅读6.2k次。Ubuntu 12 最快的两个源 个人感觉 163与cn99最快 ubuntu下包过慢 1、首先备份Ubuntu 12.04源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表,有备无患嘛) 2、修改更新源 sudo gedit /etc/apt/sources.list (打开Ubuntu 12_un.12.cc

vue动态路由(权限设置)_vue动态路由权限-程序员宅基地

文章浏览阅读5.8k次,点赞6次,收藏86次。1.思路(1)动态添加路由肯定用的是addRouter,在哪用?(2)vuex当中获取到菜单,怎样展示到界面2.不管其他先试一下addRouter找到router/index.js文件,内容如下,这是我自己先配置的登录路由现在先不管请求到的菜单是什么样,先写一个固定的菜单通过addRouter添加添加以前注意:addRoutes()添加的是数组在export defult router的上一行图中17行写下以下代码var addRoute=[ { path:"/", name:"_vue动态路由权限

JSTL 之变量赋值标签-程序员宅基地

文章浏览阅读8.9k次。 关键词: JSTL 之变量赋值标签 /* * Author Yachun Miao * Created 11-Dec-06 */关于JSP核心库的set标签赋值变量,有两种方式: 1.日期" />2. 有种需求要把ApplicationResources_zh_CN.prope

VGA带音频转HDMI转换芯片|VGA转HDMI 转换器方案|VGA转HDMI1.4转换器芯片介绍_vga转hdmi带音频转换器,转接头拆解-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏2次。1.1ZY5621概述ZY5621是VGA音频到HDMI转换器芯片,它符合HDMI1.4 DV1.0规范。ZY5621也是一款先进的高速转换器,集成了MCU和VGA EDID芯片。它还包含VGA输入指示和仅音频到HDMI功能。进一步降低系统制造成本,简化系统板上的布线。ZY5621方案设计简单,且可以完美还原输入端口的信号,此方案设计广泛应用于投影仪、教育多媒体、视频会议、视频展台、工业级主板显示、手持便携设备、转换盒、转换线材等产品设计上面。1.2 ZY5621 特性内置MCU嵌入式VGA_vga转hdmi带音频转换器,转接头拆解

推荐文章

热门文章

相关标签