个人对这方面的理解,文字纯手打,图片来自于coursera的课件
1.线性回归的定义:给出若干的训练集(训练集中
x(j)i
表示样本j中第i个项),然后拟合为一条直线,使得cost最小
不妨先看一个例子,拿课程中的例子,卖房
现在已经知道了若干的房子的大小以及卖出去的价格,现在跟着这些信息,来推断一些房子的价格
我们的任务,就是把图中的点尽可能为拟合成一条”花费最小”的直线
h(x)=θ0+θ1x
2.”花费”怎么定义呢?使用的是最小二乘法
J(θ1,θ2)=12m∑mi=1(h(x(i))−y(i))2
简单点儿说,就是所有的点到直线上x值相等的点的距离的平方,求平均,就是对应的花费
3.花费的最小怎么求呢,可以想到,这个函数肯定是连续的,那么就可以通过求偏倒解决
这就是梯度下降算法
- 对于例子,迭代方法如下
θ0=θ0−α∗1m∑mi=1(h(x(i))−y(i))
θ1=θ1−α∗1m∑mi=1(h(x(i))−y(i))∗x(i) - α 被称为learning rate,需要被选择为一个合适的值,如果太大的话,可能会越过最佳的值,然后越变越大,如果太小的话,需要迭代的次数太多
- 通常的做法就是,先任取一个 θ0θ1 然后通过多次的迭代,就可以找到一个局部最小值,可以取多组初始的 θ0θ1 ,然后找到其中最好的解,那么有一个很有意思的问题,怎么确定,找到的解肯定就是全局最好的呢
- 还有一个问题,就是更新时候必须得同步更新,简单点儿说,就是计算出的新的
θi
,先保存起来,待这一次所有的
θj
都计算完后,再同时更新所有的
θi
4.接下来考虑多feature的情况,首先梯度下降算法是肯定成立的
- 如果x1与x2相差很多,但
α
是固定的,那么可能会出现
θ1
在最优值附近摆动很大,而
θ2
却迭代的很慢,这种情况下,通常会对数据做一个初步的处理,先转换为-1~1之间的数,处理方式如下
这种方法也会加快寻到最优的速度
5.最后介绍一个更强大Normal Equation(正规方程),直接用矩阵运算就可以得到最优解(证明还没有看)
-
θ=(XT⋅X)(−1)⋅XT⋅Y
,其中
X
是一个矩阵,每一行都是1+各特征值,
Y 就是所有的结果值,来分析一下, X <script type="math/tex" id="MathJax-Element-18">X</script>是m*(n+1)的矩阵,所以复杂度就是O(n^3) - 很强大!但也有弊端,那就是比较慢,如果n=100 0000,那将慢到不可忍受,所以还得用梯度下降算法,但如果处理1000内的数据,将十分的方便
先说这么多,想到接着补充