Andrew Ng Machine Learning (2) Linear Regression

此文是斯坦福大学 Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记。
课程网址:https://www.coursera.org/learn/machine-learning/home/welcome


1. Multivariate Linear Regression

Week 1 讨论仅一个特征,即仅有一个未知量x影响了目标y的取值。如果现在有很多特征?现在我们有x1,x2…xn影响了目标y的取值。

此时需要区分的是变量标记规则:

1
2
xi表示的是第i个特征
x(i)表示的是第i个样本,一个样本是由多个特征组成的列向量

例如:

综上,我们有

可以视为,每个样本都多出一个特征:x0=1,这样表示有利于之后的矩阵表示

2. 多变量梯度下降法:

3. Feature Scaling(特征缩放)

很简单,就是将每种特征的数据范围限定在同一个数量级。例如

这样会导致迭代次数过多。这时候,如果我们找到一种mapping方式,使得两者属于同一个数量级的范围内,可以有效减少迭代次数

注意:无法降低单次的迭代时间,但是却能有效地降低迭代次数

其实方法很多,这有一种:

其中,mean(x)表示向量每个元素的平均值,max(x)表示向量中最大元素,min(x)表示向量中最小元素

4. Learning Rate

learning rate 是机器学习中的一个不稳定因素,如何判断选取的 learning rate 是合适的?我们可以看看以下这幅图:

如果以迭代次数为横坐标,cost function 结果为纵坐标,绘制的图像是递减的,说明 learning rate 选择的是恰当的。如果碰到下图所显示的三种情况,那就只有一条路:减小 learning rate

但是 learning rate 太小同样会导致一个问题:学习过慢。所以,只能靠试:0.001,0.003,0.01,0.03,0.1,0.3……

5. Polynomial Regression(多项式回归,不同于多变量线性回归)

有时候,我们需要自己创造一些“特征”,来拟合一些非线性分布情况
例如:

看上去只有一个特征x,但我们完全可以理解为x^2和√x都是单独的新特征

以后的课程会具体讲述如何选择这些特征

6. Normal Equation

梯度下降法可以用于寻找函数(cost function)的最小值,想一想,初高中的时候我们使用的是什么方法?最小值点的导数为零,然后解方程

将导数置为零这种方法即 Normal Equation

上文提过,增加一个全1分量x0后得到

可以得到:

matlab编程十分简单:

Normal Equation 有以下优缺点

1
2
3
不需要 learning rate,也就不需要选择;
不需要迭代,不需要考虑收敛的问题;
当特征非常多的时候,因为涉及求逆操作,会非常慢(注:方阵才有逆矩阵)

7. Octave Tutorial

这一部分十分简单,其实就是MATLAB的使用方法。建议不论是否初学者都去看看,会有收获。

谈到一个问题:如果现有的样本数,小于每个样本所有的特征数怎么办?去除多余的特征(PCA?)。特征过多,也可能会导致矩阵不可逆的情况。

下面记录一些觉得挺有趣的命令:

1
2
3
4
5
6
7
8
9
~=:不等于号
xor(0, 1):异或操作
rand(m, n):0~1之间的大小为m*n的随机数矩阵;randn:产生均值为0,方差为1的符合正态分布的随机数(有负数)
length(A):返回A中行、列中更大值
A(:):将矩阵A变为列向量形式,不论A是向量还是矩阵
sum(A,1):每列求和得到一个行向量;sum(A,2):每行求和得到一个列向量
pinv:伪求逆;inv:求逆
imagesc(A):帅爆!根据矩阵中每个值绘制各种颜色的方块
A.^2 ~= A^2,后者是两个矩阵相乘

8. Submitting Programming Assignments

其实看看视频就行了,主要要注意,submit() 时输入的Token,不是Coursera 的密码,而是作业的密码: