当前位置:文档之家› 线 性 回 归 方 程 推 导

线 性 回 归 方 程 推 导

线性回归之最小二乘法推导及python实现线性回归、加权线性回归及岭回归的原理和公式推导- 线性回归- 加权线性回归机器学习相关的博文相信已经很多了,作为机器学习的一枚菜鸟,写这篇博文不在于标新立异,而在于分享学习,同时也是对自己研究生生涯的总结和归纳,好好地把研究生的尾巴收好。

想着比起出去毕业旅行,在实验室总结一下自己的所学,所想,所感应该更有意义吧。

(其实也想出去玩,但是老板要求再出一篇文章,那只好和毕业旅行拜拜了,所以趁机写个系列吧,反正后面的时间应该就是文章+博客的双重循环了,其实也是挺美的哈)学习机器学习的小心得:脑袋中一定要有矩阵、向量的概念,这一点非常重要,因为我们现在处理的数据是多维的数据,所以可能无法非常直观的来表述我们的数据,所以大脑中一定要有这样的概念。

然后就是Coding再Coding,这一点自己也没做好啦,惭愧。

线性回归回归的目的就是对给定的数据预测出正确的目标值,分类的目的是对给定的数据预测出正确的类标,要注意区分这两个概念,其实我在刚接触机器学习的时候经常把这两个概念弄混。

那么,对于线性回归,就是实现对给定数据目标值的预测过程。

那么对于给定的训练数据X=[x#x2192;1,x#x2192;2,#x2026;,x#x2192;m]T" role="presentation" style="position: relative;">X=[x? 1,x? 2, (x)m]TX=[x→1,x→2,…,x→m]TX = [vec{x}_1, vec{x}_2, dots, vec{x}_m]^{T},其中x#x2192;i={xi1,xi2,xi3,#x2026;,xin}T" role="presentation" style="position: relative;">x? i={xi1,xi2,xi3,…,xin}Tx→i={xi1,xi2,xi3,…,xin}Tvec{x}_i = {x_{i1}, x_{i2}, x_{i3}, dots, x_{in}}^{T}。

对应的,这些训练数据的目标值是y#x2192;={y1,y2,y3,#x2026;,ym}" role="presentation" style="position: relative;">y? ={y1,y2,y3,…,ym}y→={y1,y2,y3,…,ym}vec{y} = {y_1, y_2, y_3, dots, y_m}。

一般的,我们通过所给定的训练数据及对应的目标值来求解线性回归的参数#x03B8;#x2192;={#x03B8;1,#x03B8;2,#x03B8;3,#x2026;,#x03B8;n}T" role="presentation" style="position: relative;">θ? ={θ1,θ2,θ3,…,θn}Tθ→={θ1,θ2,θ3,…,θn}Tvec{theta} = {{theta}_1, {theta}_2, {theta}_3, dots, {theta}_n}^{T}。

具体的,我们通过定义损失函数Jx#x2192;i(#x03B8;#x2192;)" role="presentation" style="position: relative;">Jx? i(θ? )Jx→i(θ→)J_{vec{x}_i}(vec{theta})来实现对线性回归参数的求解,损失函数定义如下:(1)Jx#x2192;i(#x03B8;#x2192;)=12(x#x2192;iT#x03B8;#x2212;yi) 2" role="presentation" style="position: relative;">Jx?i(θ? )=12(x? Tiθ?yi)2(1)(1)Jx→i(θ→)=12(x→iTθ?yi)2 begin{equation}J_{vec{x}_i}(vec{theta}) = frac{1}{2}(vec{x}^T_itheta - y_i)^2 end{equation}记住,在机器学习里面,向量的默认是列向量形式,所以上述的T" role="presentation" style="position: relative;">TTT表示转置,因为我们写的时候写成了横向量的形式。

同样在做向量乘积运算时,也应该对左边的向量加上转置,这样向量乘积才会得到一个值。

那么要最小化这个损失函数,我们可以采用随机梯度下降(Stochastic Gradient Descent)或者批梯度下降(Batch Gradient Descent),那么对参数向量#x03B8;#x2192;" role="presentation" style="position: relative;">θ? θ→vec{theta}中的每一维参数求偏导,再根据学习率来进行参数地更新,具体如下:(2)#x2202;Jx#x2192;i(#x03B8;#x2192;)#x2202;#x03B8;j=2#x00D7; 12#x00D7;(x#x2192;iT#x03B8;#x2212;yi)#x00D7;xij=(x#x2192;iT#x03 B8;#x2212;yi)#x00D7;xij" role="presentation" style="position: relative;">?Jx? i(θ? )?θj=2×12×(x? Tiθ?yi)×xij=(x? Tiθ?yi)×xij(2)(2)?Jx→i(θ→)?θj=2×12×(x→iTθ?yi)×xij=(x →iTθ?yi)×xijbegin{equation}begin{split}frac{partial J_{vec{x}_i}(vec{theta})}{partial {theta}_j}&=2times frac{1}{2}times(vec{x}^T_itheta - y_i) times {x_{ij}} &=(vec{x}^T_itheta - y_i) times {x_{ij}}end{split}end{equation}那么,对于参数#x03B8;j" role="presentation" style="position: relative;">θjθj{theta}_j的更新,批梯度下降算法如下所示:Repeat until convergence{#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#x03B8;j=#x03 B8;j#x2212;#x03B7;1m#x2211;i=1m((x#x2192;iT#x03B8;#x2212;yi)#x0 0D7;xij)" role="presentation" style="position: relative;"> θj=θj?η1m∑mi=1((x? Tiθ?yi)×xij) θj=θj?η1m∑i=1m((x→iTθ?yi)×xij)~~~~~~~~~~theta_j = {theta}_j - etafrac{1}{m}sum_{i = 1}^{m}((vec{x}^T_itheta - y_i) times {x_{ij}}) (for every #x03B8;j" role="presentation" style="position: relative;">θjθjtheta_j)其中,#x03B7;" role="presentation" style="position: relative;">ηηeta表示学习率。

而对于随机梯度下降,算法如下所示:for i = 1 to m{#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;" role="presentation" style="position: relative;"> ~~~~~~for j = 1 to n{ #xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;#x03B8;j=#x03B8;j#x2212;#x03B7;((x#x2192;iT#x03B8;#x2212;yi)#x0 0D7;xij)" role="presentation" style="position: relative;"> θj=θj?η((x? Tiθ?yi)×xij) θj=θj?η((x→iTθ?yi)×xij)~~~~~~~~~~~~theta_j = {the ta}_j - eta((vec{x}^T_itheta - y_i) times {x_{ij}})#xA0;#xA0;#xA0;#xA0;#xA0;#xA0;" role="presentation" style="position: relative;"> ~~~~~~}关于上述两种梯度下降法的区别这里就不详细说明了,这不是本小节讨论的重点,大家可以查阅相关的博客或者书籍。

(机器学习可是系统工程啊,要懂得方方面面,菜鸟到专家可得一步一个脚印呢)上述是基于梯度来求解回归系数的,下面给出基于矩阵求解回归系数的办法,这里不需要多次迭代求解,对于训练数据量少时较为实用。

首先,给出矩阵形式的损失函数:J(#x03B8;#x2192;)=12(X#x03B8;#x2192;#x2212;y#x2192;)T(X#x03B 8;#x2192;#x2212;y#x2192;)=12(#x03B8;#x2192;TXTX#x03B8;#x2192;#x 2212;#x03B8;#x2192;TXTy#x2192;#x2212;y#x2192;TX#x03B8;#x2192;+y #x2192;Ty#x2192;)=12tr(#x03B8;#x2192;TXTX#x03B8;#x2192;#x2212;# x03B8;#x2192;TXTy#x2192;#x2212;y#x2192;TX#x03B8;#x2192;+y#x2192 ;Ty#x2192;)=12(tr(#x03B8;#x2192;TXTX#x03B8;#x2192;)#x2212;2tr(y #x2192;TX#x03B8;#x2192;)+y#x2192;Ty#x2192;)" role="presentation" style="text-align: center; position: relative;">J(θ? )=12(Xθ? ?y? )T(Xθ? ?y? )=12(θ? TXTXθ? ?θ?TXTy? ?y? TXθ? +y? Ty? )=12tr(θ? TXTXθ? ?θ? TXTy? ?y? TXθ? +y? Ty? )=12(tr(θ? TXTXθ? )?2tr(y? TXθ? )+y? Ty? )J(θ→)=12(Xθ→?y→)T(Xθ→?y→)=12(θ→TXTXθ→?θ→TXTy →?y→TXθ→+y→Ty→)=12tr(θ→TXT Xθ→?θ→TXTy→?y→TXθ→+y→Ty→)=12(tr(θ→TXTXθ→)?2tr(y→TXθ→)+y→Ty→)begin{split}J(vec{theta}) &= frac{1}{2}(Xvec{theta} - vec{y})^T(Xvec{theta} - vec{y})&=frac{1}{2}(vec{theta}^TX^TXvec{theta} - vec{theta}^TX^Tvec{y} - vec{y}^TXvec{theta} + vec{y}^Tvec{y}) &=frac{1}{2}tr(vec{theta}^TX^TXvec{theta} - vec{theta}^TX^Tvec{y} - vec{y}^TXvec{theta} + vec{y}^Tvec{y}) &=frac{1}{2}(tr(vec{theta}^TX^TXvec{theta}) - 2tr(vec{y}^TXvec{theta}) + vec{y}^Tvec{y})end{split}其中,tr" role="presentation" style="position: relative;">trtrtr表示矩阵的Trace operator,暂时不知道如何翻译。

相关主题