线 性 回 归 方 程 推 导
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性回归之最小二乘法推导及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)×xij
begin{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;