linear regression
线性回归很简单,就是运用我们已知的数据集(training set)去拟合出一组θ\thetaθ,等同于在空间中拟合出了一条曲线,然后我们就可以利用下面的方程进行数据预测了。当然这些都是在我们已经完成了特征选取和模型假设之后,特征选取就是xxx向量中的每个值(比如对于预测房价,我们觉得可能跟房子大小和卧室个数有关,所以我们的 xxx就有两个值,一个代表房子大小,一个代表卧室个数),模型假设就是hθ(x)h_\theta(x)hθ(x)
hθ(x)=θTx=θ0+θ1x1+...+θnxnh_\theta(x)=\theta^Tx=\theta_0+\theta_1x_1+...+\theta_nx_nhθ(x)=θTx=θ0+θ1x1+...+θnxn
具体步骤其实只有下面这个迭代方程:
θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
对于每一个θ\thetaθ,我们运用梯度下降。转换为矩阵形式就是:
θ:=θ−α1m(XT(Xθ−y))\theta := \theta-\alpha\frac{1}{m}(X^T(X\theta-y))θ:=θ−αm1(XT(Xθ−y))
需要提一句的是,这里的矩阵XXX还需要包含x0x_0x0,也就是一个全1向量,矩阵XXX应该有 n+1n+1n+1个column。
下面是matlab代码实现
for iter = 1:num_iters
theta = theta - alpha*(1/m)*(X'*(X*theta-y));
end
如果我们不需要设置迭代结束的阈值,即代价函数。那么我们就只需要上面这个函数,设置一个迭代次数,我们就能求到我们的θ\thetaθ。
如果我们需要运用代价函数,那么就需要用到下面这个方程:
J(θ)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})^2J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
转化为矩阵形式就是:
J(θ)=12m(Xθ−y)T(Xθ−y)J(\theta) = \frac{1}{2m}(X\theta-y)^T(X\theta-y)J(θ)=2m1(Xθ−y)T(Xθ−y)
下面是matlab代码实现
J = 1/(2*m)*((X*theta-y)'(X*theta-y));
本文深入探讨了线性回归的基本概念,包括如何利用训练集拟合参数θ,通过特征选取和模型假设建立预测方程。介绍了线性回归的迭代更新公式和梯度下降法,同时阐述了在矩阵形式下的表示。最后,提供了MATLAB代码示例,展示了不依赖代价函数迭代和基于代价函数优化两种情况的实现。
2477

被折叠的 条评论
为什么被折叠?



