线 性 回 归 方 程 推 导

合集下载

线性回归方程公式推导

线性回归方程公式推导

线性回归方程公式推导从现代经济学研究看,线性回归是一种多变量经济分析方法,它能够用来研究变量之间的关系,以便确定哪些变量具有影响性。

线性回归模型是描述一个响应变量和一组predictor变量之间关系的线性关系模型。

线性回归模型有多种形式,其中最常见的是最小二乘法,即OLS,其核心思想是通过最小化以下损失函数来确定回归系数:S=1/n (yi-i)其中,yi是实际值,i是预测值,n是数据样本的个数。

有了线性回归模型,就可以推导出公式,即OLS回归方程。

它表述的意思是,假设回归系数β的值是已知的,即满足公式:β=(XX)^-1XY其中,X指的是一个有m个变量的矩阵,Y指的是一个有n个观测值的矩阵,X指的是X矩阵的转置矩阵,(XX)^-1指的是求XX的逆矩阵,XY指的是X和Y的点乘积。

由此,OLS回归模型就可以用变量yi=b1x1i+b2x2i+…+bpxpi+εi来表示,其中b1, b2,, bp分别是变量x1i, x2i,, xpi的回归系数,εi是误差项,它以期望值为零的正态分布的形式出现,表示随机噪声。

一般来说,OLS即可用来估计参数的可能性,但是,由于它们常常受到多重共线性的影响,因此需要检验其可靠性。

OLS的优点是可以提供一种最优的参数估计法,它能够有效地提高参数估计的准确性。

此外,OLS进行变量检验时,也可以有效地识别出具有影响性的变量。

不过,OLS也有其缺点,尤其是当数据存在某些问题时,可能会导致OLS的估计结果出现偏差。

主要问题包括多重共线性、异方差性和异常值。

对于这些问题,最好的解决方法是对数据进行相关性分析,从而将偏差减少到最小。

综上所述,OLS回归方程公式能够有效地描述变量之间的关系,检验其可靠性,以便确定哪些变量具有影响性。

为了确保其准确性,应当有效地处理多重共线性等问题,从而使得OLS具有更强的适用性。

求线性回归直线方程的步骤

求线性回归直线方程的步骤

请同学们回忆一下,我们以前是否学过 变量间的关系呢?
两个变量间的函数关系.
相关关系与函数关系的异同点:
相同点:两者均是指两 个变量间的关系. 不同点:①函数关系是一种确定的关系; 相关关系是一种 非确定的关系.事实上,函数关系是两个非 随机变量的关系,而相关关系是随机变量 与随机变量间的关系. ②函数关系是一种因果关系,而相关关系 不一定是因果关 系,也可能是伴随关系.
20
30
40
^ (4)当x=2时,y=143.063, 因此,这天大 约可以卖出143杯热饮。
小结:
(1)判断变量之间有无相关关系,简便方 法就是画散点图。 (2)当数字少时,可用人工或计算器,求 回归方程;当数字多时,用Excel求回归方 程。 (3)利用回归方程,可以进行预测。
热饮杯数 156 150 132 128 130 116 104 89 93 76 54
(1)画出散点图;
(2)从散点图中发现气温与热饮销售杯数之间关系的一
般规律; (3)求回归方程; (4)如果某天的气温是 2 C,预测这天卖出的热饮杯数。
0
解: (1)散点图
160 150 140 130 120 110 100 90 80 70 60 50 40 -10 0
10x y
2
x
i 1

2 i
10 x
110 10 0 1 110 10 0
a y bx 0 b 0 0
∴所求回归直线方程为 ^ y=x
小结:求线性回归直线方程的步骤: 第一步:列表 x , y , x y ;
i i i i
第二步:计算
x, y, xi , xi y
脂肪含量 40 35 30 25 20 15 10 5 0 20 25 30 35 40 年龄 45 50 55 60 65

最小二乘法的推导过程

最小二乘法的推导过程

最小二乘法的推导过程
最小二乘法是一种线性回归分析方法,用于解决当回归方程中的自变量与因变量之间存在一定误差时,如何求出最优解的问题。

其推
导过程如下:
1. 假设回归方程为y = β0 + β1x1 + β2x2 + ... + βkxk + ε,其中y为因变量,x1,x2,...,xk为自变量,β0,β1,...,βk为
回归系数,ε为误差项。

2. 根据最小二乘法的原理,我们需要求出使误差之和最小的回
归系数,即最小化残差平方和:Σ(yi - ŷi)^2,其中yi为实际值,ŷi为预测值。

3. 将回归方程中的自变量和误差项写成矩阵的形式,得到一个
线性模型:Y = Xβ + e,其中Y为n行1列的因变量向量,X为n行
k+1列的自变量矩阵,β为(k+1)行1列的回归系数向量,e为n行1
列的误差向量。

4. 利用最小二乘法的原理,将残差平方和对回归系数向量β求偏导数,并令其等于0,得到一个求解回归系数的正规方程组:X'Xβ = X'Y,其中X'为X矩阵的转置。

5. 解正规方程组,得到回归系数向量β的估计值:β =
(X'X)^-1X'Y。

6. 将得到的回归系数代入原始的回归方程中,即可得到最终的
线性回归方程。

通过以上推导过程,我们可以利用最小二乘法求解线性回归方程中的回归系数,从而预测因变量的值。

这种方法常用于统计学、金融学、经济学等领域,可以帮助我们更好地理解和分析数据。

线 性 回 归 方 程 推 导

线 性 回 归 方 程 推 导

线性回归——正规方程推导过程线性回归——正规方程推导过程我们知道线性回归中除了利用梯度下降算法来求最优解之外,还可以通过正规方程的形式来求解。

首先看到我们的线性回归模型:f(xi)=wTxif(x_i)=w^Tx_if(xi?)=wTxi?其中w=(w0w1.wn)w=begin{pmatrix}w_0w_1.w_nend{pmatrix}w=?w0?w1?. wn?,xi=(x0x1.xn)x_i=begin{pmatrix}x_0x_1.x_nend{pmatrix}xi?=?x0 x1.xn,m表示样本数,n是特征数。

然后我们的代价函数(这里使用均方误差):J(w)=∑i=1m(f(xi)?yi)2J(w)=sum_{i=1}^m(f(x_i)-y_i)^2J(w) =i=1∑m?(f(xi?)?yi?)2接着把我的代价函数写成向量的形式:J(w)=(Xw?y)T(Xw?y)J(w)=(Xw-y)^T(Xw-y)J(w)=(Xw?y)T(Xw?y) 其中X=(1x11x12?x1n1x21x22?x2n?1xm1xm2?xmn)X=begin{pmatrix}1 x_{11} x_{12} cdots x_{1n}1 x_{21} x_{22} cdots x_{2n}vdots vdots vdots ddots vdots1 x_{m1} x_{m2} cdots x_{mn}end{pmatrix}X=?11?1?x11?x21?xm1?x12?x22?xm2?x1n?x2n?xmn?最后我们对w进行求导,等于0,即求出最优解。

在求导之前,先补充一下线性代数中矩阵的知识:1.左分配率:A(B+C)=AB+ACA(B+C) = AB+ACA(B+C)=AB+AC;右分配率:(B+C)A=BA+CA(B+C)A = BA + CA(B+C)A=BA+CA2.转置和逆:(AT)?1=(A?1)T(A^T)^{-1}=(A^{-1})^T(AT)?1=(A?1)T,(AT)T=A(A^T)^T=A(AT)T=A3.矩阵转置的运算规律:(A+B)T=AT+BT(A+B)^T=A^T+B^T(A+B)T=AT+BT;(AB)T=BTAT(AB)^T=B^TA^T(AB)T=BTAT然后介绍一下常用的矩阵求导公式:1.δXTAXδX=(A+AT)Xfrac{delta X^TAX}{delta X}=(A+A^T)XδXδXTAX?=(A+AT)X2.δAXδX=ATfrac{delta AX}{delta X}=A^TδXδAX?=AT3.δXTAδX=Afrac{delta X^TA}{delta X}=AδXδXTA?=A然后我们来看一下求导的过程:1.展开原函数,利用上面的定理J(w)=(Xw?y)T(Xw?y)=((Xw)T?yT)(Xw?y)=wTXTXw?wTXTy?yTXw+yT yJ(w)=(Xw-y)^T(Xw-y)=((Xw)^T-y^T)(Xw-y)=w^TX^TXw-w^TX^Ty-y^TXw+y^TyJ(w)=(Xw?y)T(Xw?y)=((Xw)T?yT)(Xw?y)=wTXTXw?wTXTy?yT Xw+yTy2.求导,化简得,δJ(w)δw=(XTX+(XTX)T)w?XTy?(yTX)T=0?2XTXw?2XTy=0?XTXw=X Ty?w=(XXT)?1XTyfrac{delta J(w)}{delta w}=(X^TX+(X^TX)^T)w-X^Ty-(y^TX)^T=0implies2X^TXw-2X^Ty=0implies X^TXw=X^Tyimplies w=(XX^T)^{-1}X^TyδwδJ(w)?=(XTX+(XTX)T)w?XTy?(yTX)T=0?2XTX w?2XTy=0?XTXw=XTy?w=(XXT)?1XTy最后补充一下关于矩阵求导的一些知识,不懂可以查阅:矩阵求导、几种重要的矩阵及常用的矩阵求导公式这次接着一元线性回归继续介绍多元线性回归,同样还是参靠周志华老师的《机器学习》,把其中我一开始学习时花了较大精力弄通的推导环节详细叙述一下。

线 性 回 归 方 程 推 导

线 性 回 归 方 程 推 导

线性回归算法推导线性回归之最小二乘法推导及python实现前言线性模型基本形式模型评估寻找最优解python实现最小二乘法本文章为个人的学习笔记。

学习书籍《机器学习》(周志华著,俗称西瓜书)。

线性模型基本形式首先是最基本的线性模型:f(x)=w1x1+w2x2+w3x3+.+wnxn+bf( textbf{x} )=w_1x_1+w_2x_2+w_3x_3+.+w_nx_n+bf(x)=w1?x1?+w 2?x2?+w3?x3?+.+wn?xn?+b化简成向量形式f(x)=xw+bf( textbf{x})= textbf{x}textbf{w} +b f(x)=xw+bf(x)≈yf( textbf{x})approx yf(x)≈y其中x=(x1,x2,x3.,xn)textbf{x}=(x_1,x_2,x_3.,x_n)x=(x1?,x2?,x3?. ,xn?),xix_ixi? 代表xtextbf{x}x的第i个属性。

而w=(w1;w2;w3;.;wn)textbf{w}=(w_1;w_2;w_3;.;w_n)w=(w1?;w2?;w3 ;.;wn)对应于 xtextbf{x}x 不同属性的系数。

其中yyy代表了数据xtextbf{x}x的真实情况,而f(x)f(bf{x})f(x)得到的是对xtextbf{x}x的预测值,我们通过(y,x)(y,textbf{x})(y,x)对模型进行训练,力求通过线性模型f(x)f(bf{x})f(x)来对yyy未知的数据进行预测。

为了计算方便,令:x=(x1,x2,x3.,xn,1)textbf{x}=(x_1,x_2,x_3.,x_n,1)x=(x1?,x 2?,x3?.,xn?,1)w=(w1;w2;w3;.;wn;b)textbf{w}=(w_1;w_2;w_3;.;w _n;b)w=(w1?;w2?;w3?;.;wn?;b)线性模型就写成如下形式:f(x)=wxf( textbf{x})= textbf{w} textbf{x} f(x)=wx模型评估线性回归的目标就是要找到一个最合适的模型来使得预测的准确度最大化。

线性回归方程lnx公式

线性回归方程lnx公式

线性回归方程lnx公式b=(x1y1+x2y2+...xnyn-nXY)/(x1+x2+...xn-nX)。

线性回归方程是利用数理统计中的回归分析,来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法之一。

线性回归方程公式求法第一:用所给样本求出两个相关变量的(算术)平均值:x_=(x1+x2+x3+...+xn)/ny_=(y1+y2+y3+...+yn)/n第二:分别计算分子和分母:(两个公式任选其一)分子=(x1y1+x2y2+x3y3+...+xnyn)-nx_Y_分母=(x1^2+x2^2+x3^2+...+xn^2)-n*x_^2第三:计算b:b=分子/分母用最小二乘法估计参数b,设服从正态分布,分别求对a、b的偏导数并令它们等于零,得方程组解为其中,且为观测值的样本方差.线性方程称为关于的线性回归方程,称为回归系数,对应的直线称为回归直线.顺便指出,将来还需用到,其中为观测值的样本方差。

先求x,y的平均值X,Y再用公式代入求解:b=(x1y1+x2y2+...xnyn-nXY)/(x1+x2+...xn-nX)后把x,y的平均数X,Y代入a=Y-bX求出a并代入总的公式y=bx+a得到线性回归方程(X为xi的平均数,Y为yi的平均数)线性回归线性回归是利用数理统计中的回归分析,来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法之一,应用十分广泛。

变量的相关关系中最为简单的是线性相关关系,设随机变量与变量之间存在线性相关关系,则由试验数据得到的点,将散布在某一直线周围。

因此,可以认为关于的回归函数的类型为线性函数。

分析按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。

如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

线 性 回 归 方 程 推 导

线 性 回 归 方 程 推 导

线性回归之最小二乘法线性回归Linear Regression——线性回归是机器学习中有监督机器学习下的一种简单的回归算法。

分为一元线性回归(简单线性回归)和多元线性回归,其中一元线性回归是多元线性回归的一种特殊情况,我们主要讨论多元线性回归如果因变量和自变量之间的关系满足线性关系(自变量的最高幂为一次),那么我们可以用线性回归模型来拟合因变量与自变量之间的关系.简单线性回归的公式如下:y^=ax+b hat y=ax+by^?=ax+b多元线性回归的公式如下:y^=θTx hat y= theta^T x y^?=θTx上式中的θthetaθ为系数矩阵,x为单个多元样本.由训练集中的样本数据来求得系数矩阵,求解的结果就是线性回归模型,预测样本带入x就能获得预测值y^hat yy^?,求解系数矩阵的具体公式接下来会推导.推导过程推导总似然函数假设线性回归公式为y^=θxhat y= theta xy^?=θx.真实值y与预测值y^hat yy^?之间必然有误差?=y^?yepsilon=haty-y?=y^?y,按照中心极限定理(见知识储备),我们可以假定?epsilon?服从正态分布,正态分布的概率密度公式为:ρ(x)=1σ2πe?(x?μ)22σ2rho (x)=frac {1}{sigmasqrt{2pi}}e^{-frac{(x-mu)^2}{2sigma^2}}ρ(x)=σ2π1e2σ2(x?μ)2?为了模型的准确性,我们希望?epsilon?的值越小越好,所以正态分布的期望μmuμ为0.概率函数需要由概率密度函数求积分,计算太复杂,但是概率函数和概率密度函数呈正相关,当概率密度函数求得最大值时概率函数也在此时能得到最大值,因此之后会用概率密度函数代替概率函数做计算.我们就得到了单个样本的误差似然函数(μ=0,σmu=0,sigmaμ=0,σ为某个定值):ρ(?)=1σ2πe?(?0)22σ2rho (epsilon)=frac {1}{sigmasqrt{2pi}}e^{-frac{(epsilon-0)^2}{2sigma^2}}ρ(?)=σ2π?1?e?2σ2(?0)2?而一组样本的误差总似然函数即为:Lθ(?1,?,?m)=f(?1,?,?m∣μ,σ2)L_theta(epsilon_1,cdots,e psilon_m)=f(epsilon_1,cdots,epsilon_m|mu,sigma^2)Lθ?(?1?,? ,?m?)=f(?1?,?,?m?∣μ,σ2)因为我们假定了?epsilon?服从正态分布,也就是说样本之间互相独立,所以我们可以把上式写成连乘的形式:f(?1,?,?m∣μ,σ2)=f(?1∣μ,σ2)?f(?m∣μ,σ2)f(epsilon_1,cdots,epsilon_m|mu,sigma^2)=f(epsilon_1|mu,sigma^2)*cdots *f(epsilon_m|mu,sigma^2)f(?1?,?,?m?∣μ,σ2)=f(?1?∣μ,σ2)?f(?m?∣μ,σ2) Lθ(?1,?,?m)=∏i=1mf(?i∣μ,σ2)=∏i=1m1σ2πe?(?i?0)22σ2L_theta(epsilon_1,cdots,epsilon_m)=prod^m_{i=1}f(epsilon _i|mu,sigma^2)=prod^m_{i=1}frac{1}{sigmasqrt{2pi}}e^{-frac{(epsilon_i-0)^2}{2sigma^2}}Lθ? (?1?,?,?m?)=i=1∏m?f(?i?∣μ,σ2)=i=1∏m?σ2π?1?e?2σ2(?i?0)2?在线性回归中,误差函数可以写为如下形式:i=∣yiy^i∣=∣yiθTxi∣epsilon_i=|y_i-haty_i|=|y_i-theta^Tx_i|?i?=∣yi?y^?i?∣=∣yi?θTxi?∣最后可以得到在正态分布假设下的总似然估计函数如下:Lθ(?1,?,?m)=∏i=1m1σ2πe?(?i?0)22σ2=∏i=1m1σ2πe?(yi θTxi)22σ2L_theta(epsilon_1,cdots,epsilon_m)=prod^m_{i=1} frac{1}{sigmasqrt{2pi}}e^{-frac{(epsilon_i-0)^2}{2sigma^2}}=pro d^m_{i=1}frac{1}{sigmasqrt{2pi}}e^{-frac{(y_i-theta^Tx_i)^2}{2sigma^2}}L θ?(?1?,?,?m?)=i=1∏m?σ2π?1?e?2σ2(?i?0)2?=i=1∏m?σ2π?1 e2σ2(yi?θTxi?)2?推导损失函数按照最大总似然的数学思想(见知识储备),我们可以试着去求总似然的最大值.遇到连乘符号的时候,一般思路是对两边做对数运算(见知识储备),获得对数总似然函数:l(θ)=loge(Lθ(?1,?,?m))=loge(∏i=1m1σ2πe?(yi?θTxi)22σ2)l(theta)=log_e(L_theta(epsilon_1,cdots,epsilon_m))=log_ e(prod^m_{i=1}frac{1}{sigmasqrt{2pi}}e^{-frac{(y_i-theta^Tx_i)^2}{2sigma^2}}) l(θ)=loge?(Lθ?(?1?,?,?m?))=loge?(i=1∏m?σ2π?1?e?2σ2(yi θTxi?)2?)l(θ)=loge(∏i=1m1σ2πe?(yi?θTxi)22σ2)=∑i=1mloge1σ2πexp(?(yi?θTxi)22σ2)=mloge1σ2π?12σ2∑i=1m(yi?θTxi)2l (theta) = log_e(prod^m_{i=1}frac {1}{sigmasqrt{2pi}}e^{-frac{(y_i-theta^Tx_i)^2}{2sigma^2}}) = sum_{i=1}^mlog_efrac {1}{sigmasqrt{2pi}}exp({-frac{(y_i-theta^Tx_i)^2}{2sigma^2} })=mlog_efrac{1}{sigmasqrt{2pi}}-frac{1}{2sigma^2}sum^m_{i= 1}(y^i-theta^Tx^i)^2l(θ)=loge?(i=1∏m?σ2π?1?e?2σ2(yi?θTxi?)2?)=i=1∑m?loge?σ2π?1?exp(?2σ2(yi?θTxi?)2?)=mloge?σ2π?1?2σ21?i=1∑m?(yi?θTxi)2前部分是一个常数,后部分越小那么总似然值越大,后部分则称之为损失函数,则有损失函数的公式J(θ)J(theta)J(θ):J(θ)=12∑i=1m(yi?θTxi)2=12∑i=1m(yi?hθ(xi))2=12∑i=1m (hθ(xi)?yi)2J(theta)=frac{1}{2}sum^m_{i=1}(y^i-theta^Tx^i)^2=frac{1}{2} sum^m_{i=1}(y^i-h_theta(x^i))^2=frac{1}{2}sum^m_{i=1}(h_the ta(x^i)-y^i)^2J(θ)=21?i=1∑m?(yi?θTxi)2=21?i=1∑m?(yi?hθ?(xi))2=21?i=1∑m?(hθ?(xi)?yi)2解析方法求解线性回归要求的总似然最大,需要使得损失函数最小,我们可以对损失函数求导.首先对损失函数做进一步推导:J(θ)=12∑i=1m(hθ(xi)?yi)2=12(Xθ?y)T(Xθ?y)J(theta)=fr ac{1}{2}sum^m_{i=1}(h_theta(x^i)-y^i)^2=frac{1}{2}(Xtheta-y )^T(Xtheta-y)J(θ)=21?i=1∑m?(hθ?(xi)?yi)2=21?(Xθ?y)T(Xθy)注意上式中的X是一组样本形成的样本矩阵,θthetaθ是系数向量,y也是样本真实值形成的矩阵,这一步转换不能理解的话可以试着把12(Xθ?y)T(Xθ?y)frac{1}{2}(Xtheta-y)^T(Xtheta-y)21?(Xθ?y) T(Xθ?y)带入值展开试试.J(θ)=12∑i=1m(hθ(xi)?yi)2=12(Xθ?y)T(Xθ?y)=12((Xθ)T? yT)(Xθ?y)=12(θTXT?yT)(Xθ?y)=12(θTXTXθ?yTXθ?θTXTy+yTy)J(theta)=frac{1}{2}sum^m_{i=1}(h_theta(x^i)-y^i)^2=frac{1} {2}(Xtheta-y)^T(Xtheta-y)=frac{1}{2}((Xtheta)^T-y^T)(Xtheta -y)=frac{1}{2}(theta^TX^T-y^T)(Xtheta-y)=frac{1}{2}(theta^T X^TXtheta-y^TXtheta-theta^TX^Ty+y^Ty)J(θ)=21?i=1∑m?(hθ?( xi)?yi)2=21?(Xθ?y)T(Xθ?y)=21?((Xθ)T?yT)(Xθ?y)=21?(θTXT yT)(Xθ?y)=21?(θTXTXθ?yTXθ?θTXTy+yTy)根据黑塞矩阵可以判断出J(θ)J(theta)J(θ)是凸函数,即J(θ)J(theta)J(θ)的对θthetaθ的导数为零时可以求得J(θ)J(theta)J(θ)的最小值.J(θ)?θ=12(2XTXθ?(yTX)T?XTy)=12(2XTXθ?XTy?XTy)=XTXθXTyfrac{partialJ(theta)}{partialtheta}=frac{1}{2}(2X^TXtheta-(y^TX)^T-X^Ty )=frac{1}{2}(2X^TXtheta-X^Ty-X^Ty)=X^TXtheta-X^Ty?θ?J(θ)? =21?(2XTXθ?(yTX)T?XTy)=21?(2XTXθ?XTy?XTy)=XTXθ?XTy 当上式等于零时可以求得损失函数最小时对应的θthetaθ,即我们最终想要获得的系数矩阵:XTXθ?XTy=0XTXθ=XTy((XTX)?1XTX)θ=(XTX)?1XTyEθ=(XTX)?1 XTyθ=(XTX)?1XTyX^TXtheta-X^Ty=0X^TXtheta=X^Ty((X^TX)^{-1}X^TX)theta=(X^TX)^{-1}X^TyEtheta=(X^TX)^{-1}X^Tytheta=(X^TX)^{-1}X^TyXTXθ?XTy=0XT Xθ=XTy((XTX)?1XTX)θ=(XTX)?1XTyEθ=(XTX)?1XTyθ=(XTX)?1XTy (顺便附上一元线性回归的系数解析解公式:θ=∑i=1m(xi?x ̄)(yi?y ̄)∑i=1m(xi?x  ̄)2theta=frac{sum^m_{i=1}(x_i-overline{x})(y_i-overline{y} )}{sum^m_{i=1}(x_i-overline{x})^2}θ=∑i=1m?(xi?x)2∑i=1m?( xi?x)(yi?y?)?)简单实现import numpy as npimport matplotlib.pyplot as plt# 随机创建训练集,X中有一列全为'1'作为截距项X = 2 * np.random.rand(100, 1)y = 5 + 4 * X + np.random.randn(100, 1)X = np.c_[np.ones((100,1)),X]# 按上面获得的解析解来求得系数矩阵thetatheta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)# 打印结果print(theta)# 测试部分X_test = np.array([[0],X_test = np.c_[(np.ones((2, 1))), X_test]print(X_test)y_predict = X_test.dot(theta)print(y_predict)plt.plot(X_test[:,-1], y_predict, 'r-')plt.axis([0, 2, 0, 15])plt.show()sklearn实现import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegression X = 2 * np.random.rand(100, 1)y = 5 + 4 * X + np.random.randn(100, 1)X = np.c_[np.ones((100,1)),X]# 新建线性回归模型model = LinearRegression(fit_intercept=False)# 代入训练集数据做训练model.fit(X,y)# 打印训练结果print(model.intercept_,model.coef_)X_test = np.array([[0],X_test = np.c_[(np.ones((2, 1))), X_test]print(X_test)y_predict =model.predict(X_test)print(y_predict)plt.plot(X_test[:,-1], y_predict, 'r-')plt.axis([0, 2, 0, 15])plt.show()使用解析解的公式来求得地模型是最准确的.计算量非常大,这会使得求解耗时极多,因此我们一般用的都是梯度下降法求解.知识储备距离公式机器学习中常见的距离公式 - WingPig - 博客园中心极限定理是讨论随机变量序列部分和分布渐近于正态分布的一类定理。

线 性 回 归 方 程 推 导

线 性 回 归 方 程 推 导

sklearn - 线性回归(正规方程与梯度下降)一: 线性回归方程线性回归(英语:linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。

这种函数是一个或多个称为回归系数的模型参数的线性组合。

只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。

这些模型被叫做线性模型。

最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。

不太一般的情况,线性回归模型可以是一个中位数或一些其他的给定X的条件下y的条件分布的分位数作为X的线性函数表示。

像所有形式的回归分析一样,线性回归也把焦点放在给定X值的y的条件概率分布,而不是X 和y的联合概率分布(多元分析领域)。

线性回归有很多实际用途。

分为以下两大类:如果目标是预测或者映射,线性回归可以用来对观测数据集的和X的值拟合出一个预测模型。

当完成这样一个模型以后,对于一个新增的X值,在没有给定与它相配对的y的情况下,可以用这个拟合过的模型预测出一个y给定一个变量y和一些变量X1X1.,XpXp{displaystyleX_{1}}X_1.,{displaystyle X_{p}}X_pX1?X1?.,Xp?Xp?,这些变量有可能与y相关,线性回归分析可以用来量化y与Xj之间相关性的强度,评估出与y不相关的,XjXj{displaystyle X_{j}}X_jXj?Xj?并识别出哪些XjXj{displaystyle X_{j}}X_jXj?Xj?的子集包含了关于y的冗余信息。

使用sklearn线性回归模型(jupyter)这里我们以波士顿的房价数据来进行使用分析(一): 导入sklearnimport numpy as np# 线性回归,拟合方程,求解系数, 一次幂# 线性方程:直来直去,不拐弯from sklearn.linear_model import LinearRegression# 导入数据集from sklearn import datasets# 导入数据分离的方法(获取数据后,一部分数据用来让回归模型学习,另一部分用来预测)from sklearn.model_selection import train_test_split(二): 获取波士顿房价数据# 获取的数据是numpy,ndarray类型data = datasets.load_boston()# 该数据内有完整的影响房价的因素和完整的房价信息,本次实验就是将数据分为两部分, 一部分用来训练模型,另一部分用来预测,最后将预测出来的数据和已有的完整信息进行对比,判断该模型是否适用于这组房价数据data # 查看data的数据结构data.feature_names # 查看影响房价的属性名# x是属性,特征,未知数X = data['data']X.shape # 运行结果是(506, 13), 506表示样本是506个, 每个样本采集了13个属性特征;13个属性,需要构建构建了13元一次方程# y是房价的估值y = data['target']# X, y = datasets.load_boston(True) 获取到X, y的值和以上的一样(三): 使用模型进行预测X_train, X_test, y_train, y_test = train_test_split(X, y) # 将数据进行分离(默认是3:1); train_test_split(X, y)函数会随机打乱顺序display(X_train.shape, X_test.shape) # (379, 13) ; (127, 13) # 声明算法linear = LinearRegression()# 训练模型linear.fit(X_train, y_train) # X_train, y_train是之前分离出来用来训练模型的数据y_ = linear.predict(X_test).round(1) # X_test是影响房价的因素,该预测模型能根据影响房价的因素预测剩余部分的房价# 预估数据和实际数据比较print(y_)print(y_test)经过估计数据和实际数据对比,说明算法模型适用于数据(四): 自建方程预测数据与使用线性模型得到的数据对比假设波士顿的房价数据符合线性回归的特性,则我们可以通过构建线性方程来预测波士顿剩余部分的房价信息根据一次线性回归方程: f(X)=Xw+bf(X) = Xw+bf(X)=Xw+b 可推导得出: f(X)=w1x1+W2x2+.+w13x13+b f(X) = w_1x_1+W_2x_2+.+w_{13}x_{13} +bf(X)=w1?x1?+W2?x2?+.+w13?x13?+b (有13个影响房价的因素)代码如下:# 通过训练模型,可从模型中得出系数ww_ = linear.coef_# 通过训练模型,可从模型中得出截距bb_ = linear.intercept_# 自建方程def fun(w_, b_, X):return np.dot(X, w_)+b_# 调用方程得到预估的房价信息fun(w_, b_, X_test).round(1) # round(1)保留一位小数array([31.3, 13.4, 28.6, 20.5, 20.4, 19.4, 32.2, 24. , 25.8, 29.5,24.5,25.2, 31.9, 8.2, 20.9, 29.3, 22.3, 35.2, 16.4, 18.5, 30.8, 41.1,16.2, 13.7, 17.7, 23.8, 7.8, 12. , 20.5, 15.3, 29.3, 26.8, 31.8,26. , 30.4, 39.2, 25.3, 40.7, 11.6, 27.3, 16.7, 18.8, 19.5, 19.9,20.7, 22.8, 17.4, 21.6, 23.3, 30. , 25.2, 23.7, 34.2, 18.2, 33.5,16. , 28.3, 14.1, 24.2, 16.2, 16.7, 23.5, 16. , 21.4, 21.8, 28.2,25.7, 31.2, 18.8, 26.4, 28.3, 21.9, 27.5, 27.1, 27.1, 15. , 26. ,26.3, 13.2, 13.3, 26.1, 20.5, 16.8, 24.3, 36.6, 21.4, 8.3, 27.8,3.6, 19.2, 27.5, 33.6, 28.4, 34.3, 28.2, 13.3, 18. , 23.5, 30.4,32.9, 23.7, 30.5, 19.8, 19.5, 18.7, 30.9, 36.3, 8. , 18.2, 13.9,15. , 26.4, 24. , 30.2, 20. , 5.6, 21.4, 22.9, 17.6, 32.8, 22.1,32.6, 20.9, 19.3, 23.1, 21. , 21.5])# 使用sklesrn中的线性模型得到的预估房价信息linear.predict(X_test).round(1)array([31.3, 13.4, 28.6, 20.5, 20.4, 19.4, 32.2, 24. , 25.8, 29.5,24.5,25.2, 31.9, 8.2, 20.9, 29.3, 22.3, 35.2, 16.4, 18.5, 30.8, 41.1,16.2, 13.7, 17.7, 23.8, 7.8, 12. , 20.5, 15.3, 29.3, 26.8, 31.8,26. , 30.4, 39.2, 25.3, 40.7, 11.6, 27.3, 16.7, 18.8, 19.5, 19.9,20.7, 22.8, 17.4, 21.6, 23.3, 30. , 25.2, 23.7, 34.2, 18.2, 33.5,16. , 28.3, 14.1, 24.2, 16.2, 16.7, 23.5, 16. , 21.4, 21.8, 28.2,25.7, 31.2, 18.8, 26.4, 28.3, 21.9, 27.5, 27.1, 27.1, 15. , 26. ,26.3, 13.2, 13.3, 26.1, 20.5, 16.8, 24.3, 36.6, 21.4, 8.3, 27.8,3.6, 19.2, 27.5, 33.6, 28.4, 34.3, 28.2, 13.3, 18. , 23.5, 30.4,32.9, 23.7, 30.5, 19.8, 19.5, 18.7, 30.9, 36.3, 8. , 18.2, 13.9,15. , 26.4, 24. , 30.2, 20. , 5.6, 21.4, 22.9, 17.6, 32.8, 22.1,32.6, 20.9, 19.3, 23.1, 21. , 21.5])通过自建模型获取预估数据与使用模型获取预估数据进行比较,两组数据完全一致;(五): 使用线性回归,求解斜率和截距根据最小二乘法: min?w∣∣Xw?y∣∣22min_{w}||Xw-y||_2^2wmin?∣∣Xw?y∣∣22? 推到得出公式: w=(XTX)?1XTyw = (X^TX)^{-1}X^Tyw=(XTX)?1XTy 以上公式只能求出w,我们可以先求出w再计算出b;但此处我们有更简单的方法:根据线性回归方程f(x)=w1x1+w2x2+b f(x) = w_1x_1+w_2x_2+bf(x)=w1?x1?+w2?x2?+b 我们可以将方程中的b看成是w3x30w_3x_3^0w3?x30?,所以可得: f(x)=w1x11+w2x21+w3x30f(x) = w_1x_1^1+w_2x_2^1+w_3x_3^0f(x)=w1?x11?+w2?x21?+w3?x30?代码如下:import numpy as npfrom sklearn.linear_model import LinearRegressionfrom sklearn import datasetsX, y = datasets.load_boston(True)linear = LinearRegression()linear.fit(X,y)w_ = linear.coef_b_ = linear.intercept_# 向X中插入一列全是1的数据(任何数的0次方都是1)X = np.concatenate([X, np.ones(shape = (506, 1))], axis=1) # 根据最小二乘法的推导公式:w和b的值为(最后一个值是b)w = ((np.linalg.inv(X.T.dot(X))).dot(X.T)).dot(y)# 以上w的写法过于装逼,所以分解为:# A = X.T.dot(X) 求X和转置后的X的内积(公式中的XTX)# B = np.linalg.inv(A) 求A的逆矩阵(公式中的-1次方)# C = B.dot(X.T) 求以上矩阵和X的转置矩阵的内积(公式中的XT) # w = C.dot(y) 与y求内积,得出w和b运行结果:array([-1.08011358e-01, 4.64204584e-02, 2.05586264e-02, 2.68673382e+00,-1.77666112e+01, 3.80986521e+00, 6.92224640e-04, -1.47556685e+00,3.06049479e-01, -1.23345939e-02, -9.52747232e-01,9.31168327e-03,-5.24758378e-01, 3.64594884e+01])print(b_)运行结果:36.45948838509001扩展一: 最小二乘法和向量范数min?w∣∣Xw?y∣∣22min_{w}||Xw-y||_2^2wmi n?∣∣Xw?y∣∣22?右上角的2是平方右下角的2是向量2范数竖线内的表达式是向量根据最小二乘法的公式, 推导得出w=(XTX)?1XTyw = (X^TX)^{-1}X^Tyw=(XTX)?1XTy向量的1-范数(表示各个元素的绝对值的和)∣∣X∣∣1=∑i=1n∣xi∣||X||_1 = sumlimits_{i=1}^n |x_i|∣∣X∣∣1?=i=1∑n?∣xi?∣向量的2-范数(表示每个元素的平方和再开平方)∣∣X∣∣2=∑i=1nxi2||X||_2 = sqrt{suml imits_{i=1}^n x_i^2}∣∣X∣∣2?=i=1∑n?xi2?向量的无穷范数(所有向量元素绝对值中的最大值)∣∣X∣∣∞=max?1≥i≤n∣Xi∣||X||_{infty} = maxlimits_{1 geq i leq n}|X_i|∣∣X∣∣∞?=1≥i≤nmax?∣Xi?∣扩展二: 导数, 偏导数对函数f(x)=x2+3x+8f(x) = x^2+3x+8f(x)=x2+3x+8 求导得: f(x)′=2x+3f(x)' = 2x+3f(x)′=2x+3求导规则:参数求导为0参数乘变量求导为常数变量的次方求导: xyx^yxy求导为yxy?1yx^{y-1}yxy?1复合函数求导:$$(x^2-x)^2$$求导: 先将括号看成一个整体求导, 结果再乘以括号内的求导结果$$2(x^2-x)(2x-1)$$有多个变量得函数求导:对函数: f(x,y)=x2+xy+y2f(x, y) = x^2+xy+y^2f(x,y)=x2+xy+y2 求导:求导规则: 多变量函数只能针对某一个变量求导,此时将其他变量看成常数将x看成常数a: fa(y)=a2+ay+y2f_a(y) = a^2+ay+y^2fa?(y)=a2+ay+y2求导得:fa′(y)=a+2yf_a'(y) = a+2yfa′?(y)=a+2y故求导得: ?f?y(x,y)=x+2yfrac{partial f}{partial y}(x,y)=x+2y?y?f?(x,y)=x+2y实现线性回归的两种方式:正规方程梯度下降二: 正规方程(一): 损失函数最小二乘法:min?w∣∣Xw?y∣∣22minlimits_{w}||Xw-y||_2^2wmin?∣∣Xw?y∣∣22?当X和y都是常数时,按照向量2范数将上面的最小二乘法解开:f(w)=(Xw?y)2f(w)=(Xw-y)^2f(w)=(Xw?y)2将X,y替换成常数a,bf(w)=(aw?b)2f(w)=(aw-b)^2f(w)=(aw?b)2f(w)=a2w2?2abw+b2f(w)=a^2w^2 - 2abw + b^2f(w)=a2w2?2abw+b2 由于最小二乘法方程的函数值都是大雨或等于0的,所以此时得到一个开口向上的抛物线(一元二次方程)此时的f(w)f(w)f(w)就是损失函数,在此时求该函数的导数(抛物线函数顶点的导数为0)就能得到该函数的最小值,也就是最小损失f′(w)=2a2w?2ab=0f'(w)=2a^2w-2ab=0f′(w)=2a2w?2ab=0(二): 矩阵常用求导公式X的转置矩阵对X矩阵求导, 求解出来是单位矩阵dXTdX=Ifrac{dX^T}{dX} = IdXdXT?=IdXdXT=Ifrac{dX}{dX^T} = IdXTdX?=IX的转置矩阵和一个常数矩阵相乘再对X矩阵求导, 求解出来就是改常数矩阵dXTAdX=Afrac{dX^TA}{dX} = AdXdXTA?=AdAXdX=ATfrac{dAX}{dX} = A^TdXdAX?=ATdXAdX=ATfrac{dXA}{dX} = A^TdXdXA?=ATdAXdXT=Afrac{dAX}{dX^T} = AdXTdAX?=A(三): 正规方程矩阵推导过程此时X,w,y都是矩阵1: 公式化简1: 最小二乘法:f(w)=∣∣Xw?y∣∣22f(w) = ||Xw-y||_2^2f(w)=∣∣Xw?y∣∣22?2: 向量2范数:∣∣X∣∣2=∑i=1nxi2||X||_2 = sqrt{sumlimits_{i = 1}^nx_i^2}∣∣X∣∣2?=i=1∑n?xi2?3: 将向量2范数的公式带入到最小二乘法中得:f(w)=((Xw?y)2)2f(w)=(sqrt{(Xw-y)^2})^2f(w)=((Xw?y)2?)2f(w)=(Xw?y)2f(w)=(Xw-y)^2f(w)=(Xw?y)2由于X, w, y都是矩阵, 运算后还是矩阵; 矩阵得乘法是一个矩阵得行和另一个矩阵得列相乘; 所以矩阵的平方就是该矩阵乘以他本身的转置矩阵f(w)=(Xw?y)T(Xw?y)f(w)=(Xw-y)^T(Xw-y)f(w)=(Xw?y)T(Xw?y)注意: 整体转置变成每个元素都转置时,若是有乘法, 则相乘的两个矩阵要交换位置; 如下所示!f(w)=(wTXT?yT)(Xw?y)f(w)=(w^TX^T-y^T)(Xw-y)f(w)=(wTXT?yT)(Xw y)f(w)=wTXTXw?wTXTy?yTXw+yTyf(w)=w^TX^TXw-w^TX^Ty-y^TXw+y^Tyf( w)=wTXTXw?wTXTy?yTXw+yTy注意: 若想交换两个相乘的矩阵在算式中的位置,则交换之后双方都需要转置一次; 如下所示!f(w)=wTXTXw?(XTy)T(wT)T?yTXw+yTyf(w)=w^TX^TXw-(X^Ty)^T(w^T)^ T-y^TXw+y^Tyf(w)=wTXTXw?(XTy)T(wT)T?yTXw+yTyf(w)=wTXTXw?yTXw?yTXw+yTyf(w)=w^TX^TXw-y^TXw-y^TXw+y^Tyf(w)= wTXTXw?yTXw?yTXw+yTyf(w)=wTXTXw?2yTXw+yTyf(w) = w^TX^TXw - 2y^TXw + y^Ty f(w)=wTXTXw?2yTXw+yTyf(w)=wTXTXw?2yTXw+yTyf(w) = w^TX^TXw - 2y^TXw + y^Ty f(w)=wTXTXw?2yTXw+yTy这里 yTyy^TyyTy 是常数求导后为02yTXw2y^TXw2yTXw 求导:d(2yTX)wdw=(2yTX)T=2XT(yT)T=2XTyfrac{d(2y^TX)w}{dw}=(2y^TX)^ T=2X^T(y^T)^T=2X^Tydwd(2yTX)w?=(2yTX)T=2XT(yT)T=2XTy wTXTXww^TX^TXwwTXTXw求导:dwTXTXwdw=d(wTXTX)wdw+dwT(XTXw)dw=(wTXTX)T+XTXw=XT(XT)T(wT)T +XTXw=2XTXwfrac{dw^TX^TXw}{dw}=frac{d(w^TX^TX)w}{dw}+frac{dw^T(X^TXw)}{dw}=(w^TX^TX)^T+X^TXw=X^T(X^T)^T(w^T)^T+X^TXw=2X^TXwdwd wTXTXw?=dwd(wTXTX)w?+dwdwT(XTXw)?=(wTXTX)T+XTXw=XT(XT)T(wT)T+XT Xw=2XTXwf′(w)=2XTXw?2XTyf'(w) = 2X^TXw - 2X^Tyf′(w)=2XTXw?2XTy令f′(w)=0f'(w)=0f′(w)=0,则:2XTXw?2XTy=02X^TXw - 2X^Ty = 02XTXw?2XTy=0XTXw=XTyX^TXw=X^TyXTXw=XTy矩阵运算没有除法,可以用逆矩阵实现除法的效果等式两边同时乘以XTXX^TXXTX的逆矩阵(XTX)?1(X^TX)^{-1}(XTX)?1 (XTX)?1(XTX)w=(XTX)?1XTy(X^TX)^{-1}(X^TX)w=(X^TX)^{-1}X^Ty(X TX)?1(XTX)w=(XTX)?1XTyIw=(XTX)?1XTyIw=(X^TX)^{-1}X^TyIw=(XTX)?1XTy I是单位矩阵得到正规方程:w=(XTX)?1XTyw=(X^TX)^{-1}X^Tyw=(XTX)?1XTy(四): 数据挖掘实例(预测2020年淘宝双十一交易额)import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionX = np.arange(2009, 2020) # 年份X = X -2008 # 年份数值太大,差别不明显y = np.array([0.5, 9.36, 52, 191, 350, 571, 912, 1207, 1682, 2135, 2684]) # 09年到19年的交易额假设X和y之间是一元三次的关系(按照前几年的数据走势提出的假设)f(x)=w1x+w2x2+w3x3+bf(x)=w_1x+w_2x^2+w_3x^3+bf(x)=w1?x+w2?x2 +w3?x3+bf(x)=w0x0+w1x1+w2x2+w3x3f(x)=w_0x^0+w_1x^1+w_2x^2+w_3x^3f(x) =w0?x0+w1?x1+w2?x2+w3?x3# X_oo = np.concatenate([a,a]) # 横着级联X_train = np.c_[X**0, X**1, X**2, X**3] # 竖着级联array([[ 1, 1, 1, 1],[ 1, 2, 4, 8],[ 1, 3, 9, 27],[ 1, 4, 16, 64],[ 1, 5, 25, 125],[ 1, 6, 36, 216],[ 1, 7, 49, 343],[ 1, 8, 64, 512],[ 1, 9, 81, 729],[ 1, 10, 100, 1000],[ 1, 11, 121, 1331]], dtype=int32)linear = LinearRegression(fit_intercept=False) # 声明算法; fit_intercept=False将截距设置为0, w0就是截距linear.fit(X_train, y) # 训练w_ = linear.coef_print(linear.coef_.round(2)) # 获取系数print(linear.intercept_) # 获取截距[ 58.77 -84.06 27.95 0.13]可以得到方程:f(x)=58.77?84.06x+27.95x2+0.13x3f(x)=58.77-84.06x+27.95x^2+0 .13x^3f(x)=58.77?84.06x+27.95x2+0.13x3X_test = np.linspace(0,12,126) # 线性分割(将0,12之间分成126分)等差数列包含1和12X_test = np.c_[X_test**0, X_test**1, X_test**2, X_test**3] # 和训练数据保持一致y_ = linear.predict(X_test) # 使用模型预测plt.plot(np.linspace(0,12,126), y_, color='g') # 绘制预测方程曲线plt.scatter(np.arange(1,12), y, color='red') # 绘制每年的真实销量# 定义函数fun = lambda x : w_[0] + w_[1]*x + w_[2]*x**2 + w_[-1]*x**3 '''3294.2775757576132'''三: 梯度下降梯度下降法的基本思想可以类比为一个下山的过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)×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,暂时不知道如何翻译。

相关文档
最新文档