最近一直在学机器学习,但感觉学习效率低,理解不深入,所以想通过写博客总结来加深自己的理解,写一下我的理解过程, 也希望能帮到其他人。
现在过头来看,线性回归其实是机器学习最简单的算法了,所以大部分机器学习的课程都拿它开刀。为什么之前一直都觉得机器学习算法比数据结构什么的那些算法难很多呢,我觉得是机器学习算法背后涉及的数学知识比较多,就比如线性回归,涉及到矩阵乘法、求逆,函数求导,其他算法再加上一个概率论。如果你觉得机器学习算法学起来比较吃力,建议还是回顾下数学。
线性回归的用途我就不再多说了,直接开始。其实整个算法都围绕下面这一个公式,我们其实是想用一条线来表示出X和y之间的变化关系。我们有测试数据X,和其对应的结果y,其实就是想知道theta。假设X,y不是一个向量,只是一个数,theta就很好求了,直接y/X就得到theta了。但在机器学习中,theta不是简单的一个值,而是由多个值组成的向量。
y=hθ(x)
y=hθ(x)
求解线性回归,多用的是最小二乘法。想想看,我们什么时候能确定我们求到的theta值是正确的? 是不是相当于 theta*x 和y 差值最小的时候,这里为了后面计算方便,我们取差值的平方。这里我们构造出一个关于theta的凸函数。 其实当这个函数值虽小的时候,我们得到的theta是最准确的,因为函数值和实际值差值最小嘛。
J(θ)=∑i=1m(hθ(xi)−yi)2
J(θ)=∑i=1m(hθ(xi)−yi)2
如何计算呢? 在上式子中,我们已知x和y,这里就变成一个单纯关于theta 的函数,我们可以用梯度下降来求theta的值。
首先求
y=θTX
y=θTX
其实我们也可以用y/x的方式来求解theta的值,但这个时候用的除法就不是小学学的那种除法,而是矩阵的除法。不过一般矩阵都不说除法的,都是乘以逆矩阵来表示除法,于是可能想当然的得到下下面这个 错误 公式,因为这个不符合矩阵的运算法则。。
θT=y∗X−1
θT=y∗X−1
其实真正的解析解计算公式是下面这个,但在其计算过程中需要求逆矩阵,效率会比较低, 有可能矩阵不可逆。
θ=(XTX)−1XTy