你的位置:首页 > 数据库

[数据库]斯坦福CS229机器学习课程笔记一:线性回归与梯度下降算法


应该是去年的这个时候,我开始接触机器学习的相关知识,当时的入门书籍是《数据挖掘导论》。囫囵吞枣般看完了各个知名的分类器:决策树、朴素贝叶斯、SVM、神经网络、随机森林等等;另外较为认真地复习了统计学,学习了线性回归,也得以通过orange、spss、R做一些分类预测工作。可是对外说自己是搞机器学习的还是不太自信,毕竟和科班出身的各位大牛相比自己对这些模型、算法的理解只能算是“知其然而不知其所以然”,用起来总感觉哪里不对劲。

因此,去年早早地就把网易公开课上Andrew大神的斯坦福CS229课程以及相应的讲义下载了下来,但每次一想学,看到每集1个多小时的内容就望而生却,感觉没有足够的整块的时间来学习。好在过年回家期间,实在没有其他借口不学了,于是才能有这篇学习笔记……截止今天下午,刚好学完了前四课,听Andrew Ng讲完了GLM广义线性模型的相关内容。真的是感觉相见恨晚。我要向所有看到本文的同学推荐这个课程(虽然是07年的)。

机器学习三要素

机器学习的三要素为:模型、策略、算法。
这些知识来自于李航写的《统计学习方法》。“外国的老师善于形象化地举例,中国的老师善于总结归纳”这句话还是很有道理的,适当的归纳有助于理清我们的思路,不知大家是否有和我类似的疑惑:“线性回归是模型还是算法?”,“SVM是模型还是算法?”接下来我会结合自己的思考,从模型、策略、算法的角度整理学习笔记。

Linear Regression线性回归

1.三要素

模型:就是所要学习的条件概率分布或决策函数。
相信线性回归模型大家都很熟悉(高三时就学过):

策略:按照什么样的准则学习或选择最优的模型。
学过线性回归的同学应该记得最小化均方误差,即所谓的least-squares(在spss里线性回归对应的模块就叫OLS即Ordinary Least Squares):

算法:基于训练数据集,根据学习策略,选择最优模型的计算方法。
确定模型中每个θi取值的计算方法,往往归结为最优化问题。对于线性回归,我们知道它是有解析解的,即The normal equations:

因为我不是做科研的,所以解析解的推导没有细看。(我猜很多人可能就是在第二集中段看到这么复杂的推导而放弃继续学习的。)在推导解析解之前,NG还介绍了一个很重要的算法:

2.gradient descent algorithm 梯度下降算法

课程中的比喻很形象,将用最快的速度最小化损失函数,比作如何最快地下山,也就是每一步都应该往坡度最陡的方向往下走,而坡度最陡的方向就是损失函数相应的偏导数,因此算法迭代的规则是:

其中α是算法的参数learning rate,α越大每一步下降的幅度越大速度也会越快,但过大有可能导致算法不准确。
另外对于线性规划问题,通常J函数(误差平方和)是碗状的,所以往往只会有一个全局最优解,不用过多担心算法收敛到局部最优解。

当训练集的样本量大于1时,有两种算法:
batch gradient descent 批量梯度下降

stochastic gradient descent (incremental gradient descent) 随机梯度下降

当训练样本量很大时,batch gradient descent的每一步都要遍历整个训练集,开销极大;而stochastic gradient descent则只选取其中的一个样本,因此后者的速度要快于前者。另外,虽然stochastic gradient descent可能不会收敛,但是实践当中大多数情况下得到的结果都是真实最小值的一个足够好的近似。

3.为什么在选择策略时,我们使用的是误差平方和,而不是绝对值或其他损失函数?

首先我们得复习一下线性回归的模型及假设:

ε(i) ∼ N(0, σ2),随机误差ε服从正态分布(高斯分布)
ε(i) are distributed IID,随机误差ε是独立同分布的
于是可以获得目标变量的条件概率分布:

整个训练集的似然函数,与对数似然函数分别为:

因此,最大化对数似然函数,也就相当于最小化

4.Locally weighted linear regression (LOESS)

LOESS与线性回归的区别

加权函数w的一个选择是

|x(i) − x|越小,权重w(i)越接近1;越大,则权重越小
τ被称为bandwidth参数,控制权重下降的快慢,τ越大下降速度越慢

  • LOESS是一个非参数算法:对于不同的输入变量,需要利用训练集临时重新拟合参数。
  • 线性回归是一个参数算法:参数个数是有限的,拟合完参数后就可以不考虑训练集,直接进行预测。
  • LOESS可以缓解特征选择的需求(是否为一个特征添加高次项)

总结

本来想一口气写完前四节课的笔记,但发现量还是太大了还是分开写吧。总结一下收获:

    1. 记住了机器学习三要素,不会再把模型和算法搞混了
    2. 了解了梯度下降算法,包括批量梯度下降与随机梯度下降
    3. 从最大化似然函数的角度明白为什么线性回归使用误差平方和作为损失函数是一个好的选择
    4. 了解一个非参数算法,局部加权线性回归