1. 单变量线性回归(Linear Regression with One Variable)
1.1 模型表示
像上述公式,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
例子如下:
单变量线性方程,就是我们初中就学的一元一次函数。
当然啦,除了这个模型之外,我们还有很多其他的线性模型,比如指数模型、对数模型等等,除了线性模型之外,还有非线性模型,有这么多的模型,其目的就是在于更好的拟合训练集的数据,以使得预测率更高。
以下是对模型的具体定义:
2. 代价函数(Cost Function)
代价函数就是为了就是找到目的函数的最优解。
因为在一个训练集中,有无数个模型(一元一次函数),我们需要找到最拟合这个训练集的一个函数,所以就引入了代价函数,用来找到那个最好的模型。
2.1公式表示
上述是平方误差代价函数,这也是常用到的代价函数,它通过目的函数跟各个实际值的误差平方建立新的函数。为了使这个值不受个别极端数据影响而产生巨大波动,采用类似方差再取二分之一的方式来减小个别数据的影响。
2.2 代价函数的直观理解①
最优解即为代价函数的最小值,根据以上公式多次计算可得到代价函数的图像:
可以看到该代价函数的确有最小值,这里恰好是横坐标为1的时候。
2.3 代价函数的直观理解②
如果有更多参数,就会更为复杂,两个参数的时候就已经是三维图像了:
3. 梯度下降算法(Gradient Descent)
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1) 的最小值。
个人理解,代价函数是分析模型与实际训练集之间的误差,而梯度下降算法的作用,就是找出那个误差最小的代价函数。
算法思想
- 从参数的某一个(组)值开始,比如从θ0=0和θ1=0开始
- 保持该(组)值持续减小,如果是一组值就要保证他们同步更新,直到找到我们希望找到的最小值
我们要找到一条最快下山的路径,我们走的每一步大小就是α 。
如果在不同的起点,最后到达的最低点也会不一样。
3.1批量梯度下降(batch gradient descent)
- α:学习速率,决定我们让代价函数下降程度最大的方向迈出的步子有多大
3.1.1 同步更新(Simultaneous update)
在梯度下降算法中,我们需要更新θ0,θ1,实现梯度下降算法的微妙之处是,在这个表达式中,如果你要更新这个等式,你需要同时更新。
3.1.2 梯度下降算法理解
如果 α 太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果 α 太大,它会导致无法收敛,甚至发散。
解决方法——乘偏导数
首先初始化我的梯度下降算法,在那个品红色的点初始化,如果
我更新一步梯度下降,随着我接近最低点,我的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后我想再梯度下降一步,在这个绿点,我自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所 以,我再进行一步梯度下降时,我的导数项是更小的,θ1更新的幅度就会更小。所以随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现,已经收敛到局部极小值。
3.1.3 线性回归的批量梯度下降
偏导数求解推导过程
批量梯度下降方程
通过上面几条公式的整合,最终得出以下公式
4. 线性代数基础
个人现在认为,线性代数的作用主要是为了方便操作训练集。
4.1 矩阵的定义
横为行,竖为列,表示方法一般是R^(m*n)
寻找某个矩阵元素
4.2 矩阵加法(Matrix Addition)
同一个位置的矩阵元素相加,得到新的矩阵
4.3 矩阵乘法(Scalar Multiplication)
将值与矩阵每个元素相乘,得到新的矩阵
4.4 矩阵的组合运算(Combination of Operands)
将矩阵加减法和乘除法结合起来,道理都一样
4.5 两个矩阵相乘
A矩阵的行 乘 B矩阵的列 得到新矩阵 y 。
4.6 矩阵应用到梯度下降算法实例
把训练集做成一个矩阵,把线性回归方程做成另外一个矩阵,将两个矩阵相乘,最后就能得出一个新的矩阵。
4.7 单位矩阵
在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这种矩阵被称为单位矩阵.它是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1。除此以外全都为0。
除0矩阵外,任何矩阵乘单位矩阵都等于它本身。
4.8 逆矩阵
用octave求得逆矩阵:pinv()函数