这是对andrew ng 公开课的笔记记录。
线性回归其实是要找到一个可以很好的拟合空间中的点的线性函数。为了衡量函数是否足够好,就需要对失误进行量化。几乎所有的线性回归都是采用最小二乘法,这个最小二乘法有很多种理解方式。
1. 公开课上给出了一种概率论的理解方式,即将假设失误|y - h(x)|遵循高斯分布(这里有一个IID的假设),这样要找到使整体失误的概率最大的方式,采用最大似然法的结果就是最小二乘法。
2. 这是一个cost function即对失误进行量化的函数,目的在于对失误进行记录,失误越大则函数越差,即惩罚越重,即penalty。这样考虑如何惩罚的时候采用最小二乘法有几个有点:
a. 无视符号
b.对失误大的点惩罚大
c.利于优化求解,convex
对于最小二乘法,andrew ng说过有很多种理解方式,因为当务之急是学习neural network, 对于基础部分暂时跳过。(标记)
各种求解方法
Gradient Descent
首先要对特征归一化
1. batch gradient descent
也是通常意义上的gradient descent. 本质是找到下降最快的方向前进,其中需要设置步长。步长较大可能会不收敛,步长小收敛慢。私以为步长对这个算法尤为重要。
特点:收敛慢,是通解,只可以求得局部最优解,要求函数convex
2. incremental gradient descent
区别于batch的在于 batch一次性算完整个cost 函数的导数等,也就是说每次迭代都需要对整个数据库进行计算。这是很耗时的,且在收敛的前期即远离最优解的地方(远离是相对步长定义的)是没有意义。而incremental gradient descent是在时间和效果上做了tradeoff。因为一次只采用一个样本进行迭代,速度自然增加,但是无法保证找到的是最优解。(这也是我认为这个算法最大的问题) 私以为可以放松对incremental gradient descent的收敛的判断条件,得出初步解之后用batch gradient descent。 不过gradient descent本来也就是一种比较简单直观的算法,根据andrew ng的公开课,有很多种最优化算法,虽然比较复杂,但是速度快,而且不需要设定步长,因为不涉及算法,此处先跳过
(标记)
特点:速度快,但是无法保证得到最优解。可以在要求不高的时候使用。
牛顿法
牛顿法本来就是用于求最优化问题以及寻找零点的一种解法。此处仅写一些边边角角的知识。
1. 牛顿法对初始值设定有要求,大致上是越接近最优解越好。
2. 找的是局部最优解(导数的零点)
3. 需要对Hession矩阵求逆,即要求H可逆。若不可逆公开课上貌似提过可以用pinv(待求证)。理论上可以用拟牛顿法替代(标记)
4. 牛顿法收敛速度快,即迭代次数少,但是每次迭代需要对H求逆,即其速度快慢很大程度上取决于求逆算法的好坏,在小数据中要优于梯度算法,大数据中慢于或等于梯度算法标记)
直接求解法
针对线性回归特殊例子中通过对cost function的导数置零的方法求得的公式,直接求解。
特点:速度快(尤其对小数据),但是同样需要求逆,对大数据难以保证速度。保证最优解
对R-n->R的一个函数的求导可以充分利用trace的 特点。
线性回归对非线性函数的优化
1. 加入多项式特征量
特点:随多项式n特征数成指数式增长,且难以确定n的大小(overfitting vs underfitting)(可以通过将参数加入惩罚机制进行控制regularization)。
【个人观点】 对于一个简单的sin函数,无论增加n到多大,只要n有限则必存在误差,所以有些时候不仅可以增加多项式特征量,也可以根据数据特点考虑sin log exp等函数,但是这也会使得这个方法对人的要求较多。
2. locally weighted regression
这是对数据点加以权重,离目标点越近权重越大。采用了Guassian函数用于表示权重,根据ng的公开课,这种方法只是借了高斯函数的形,并没有涉及到概率论的内容,可以自己考虑替换为其他符合权重特点的函数。同时因为采用了高斯函数,还没有看到kernel的部分,不知道这个和kernel的关系
(标记)
特点:对每个点都要重新对整个数据库进行拟合,运算量大,同时对高斯函数中参数需要进行控制(overfitting vs underfitting),存储模型时对每个拟合的直线都要记录其范围以及参数。但私以为可以应对各种非线性函数。