线 性 回 归 方 程 推 导
- 格式:pdf
- 大小:182.57 KB
- 文档页数:4
线性回归——正规方程推导过程
线性回归——正规方程推导过程
我们知道线性回归中除了利用梯度下降算法来求最优解之外,还可以通过正规方程的形式来求解。
首先看到我们的线性回归模型:
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 vdots
1 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+CA
2.转置和逆:(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=A
3.矩阵转置的运算规律:(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)X
2.δAXδX=ATfrac{delta AX}{delta X}=A^TδXδAX?=AT
3.δ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+yTy
2.求导,化简得,
δ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=0implies
2X^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
最后补充一下关于矩阵求导的一些知识,不懂可以查阅:矩阵求导、几种重要的矩阵及常用的矩阵求导公式
这次接着一元线性回归继续介绍多元线性回归,同样还是参靠周志华老师的《机器学习》,把其中我一开始学习时花了较大精力弄通的推导环节详细叙述一下。
ax.plot(test_X[:, 0], test_X[:, 1], pred_y, c='r')
前部分是一个常数,后部分越小那么总似然值越大,后部分则称之为损失函数,则有损失函数的公式J(θ)J(theta)J(θ): 截距在数学中的定义是:直线的截距分为横截距和纵截距,横截距是直线与X轴交点的横坐标,纵截距是直线与Y轴交点的纵坐标。
根据上边的例子可以看出,我们一般讨论的截距默认指纵截距.
data = pd.read_excel('1.xlsx',index_col=0)
b_gradient = -(1.0-n)*np.dot((y-pred_y).T,
np.ones(shape=[n, 1]))
J(w)=(Xw?y)T(Xw?y)J(w)=(Xw-y)^T(Xw-y)J(w)=(Xw?y)T(Xw?y) 我们使用(x(i,0),x(i,1),x(i,2)…x(i,m))表示第i组数据,一共n组数据。
private String recusiveSearchClassType(TreeNode node, frac{{partial E}}{{partial b}} = frac{1}{m}sumlimits_{i = 1}^m {({w^T}{x^i} + b - {y^i}} ){x^i}。