编程作业放到了github上:coursera_machine_learning
1. Linear Regression with Multiple Variables
紧接上一篇的例子 – 房价预测。现在我们有更多的特征来预测房价了,“房间的数量”、“楼层”、“房龄”……
说明一下接下来要用到的符号:
n | 特征的数量 |
---|---|
m | 训练数据的数量 |
x(i) | 训练集中的第 i 个数据 |
第
i
个数据的第 | |
y(i) | 第 i 个数据的标签(真实输出结果) |
第 i 个数据的预测结果 | |
预测模型 |
训练集(部分)如下图所示:
写成矩阵的形式,令 x(i)=(1;x(i)1;x(i)2;x(i)3;x(i)4) 是一个column vector, x(i)∈ℝn×1 ;令 θ=(θ0;θ1;θ2;θ3;θ4) 也是一个column vector, θ∈ℝn×1 ,则:
和之前一样,这个模型中的未知数是 θ ,只要知道了 θ 就知道了模型。模型是通过error来学习了,这个问题中的error定义和之前的一模一样,就是求预测结果与实际结果的平方差,然后对整个数据集中的error求和再平均来作为模型对数据的error:
然后再用上一篇中说的gradient descent方法更新 θ 即可,过程如下:
2. Gradient descent in practice
2.1 Feature Scaling
让特征们的取值处于同一个范围里面,可以加快梯度下降法的收敛速度。原因在下图中形象说明了。
令 x1 = size (0-2000 feet2 ), x1 = number of bedrooms (1-5)
由于 x1 的取值范围比 x2 的大,所以在 J(θ) 关于 θ1 和 θ2 的图中, θ2 的取值范围应该比 θ1 的大:
举例:
现在 x(1)1 和 x(2)1 的平均值是0了。
2.2 Choose Learning Rate α
在不断更新 θ 即迭代次数不断增加之后, J(θ) 的值应该不断下降,直至不怎么改变了,模型训练完毕,如下图中最后平坦的部分:
3. Features and Polynomial Regression
除了训练集中已经给出的特征,还可以根据这些特征来生成新的特征。比如说最简单的,已有特征“长”和“宽”,可以使用生成的特征“面积”来进行模型的学习。
另外 h(x) 也可以使用polynomial regression来代替linear regression,则:
然后可以通过对特征的处理,将polynomial regression转换成linear regression:
只要令:
然后继续使用: h(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4 即可。
所以其实还是在对特征进行处理,至于选取哪一种regession的方式,可以根据数据的走向来决定:
4. Matrix Representation
在实际计算过程中,用矩阵来计算会提升计算速度。下面就来看看怎么转换成矩阵形式。
如下例子:
5. Normal Equation
在Linear Regression中,Normal equation可以用来取代Gradient descent来计算 θ 。
由于最完美的拟合就是让 ∂∂θJ(θ)=0 ,于是在理想条件下可以通过转置和求逆就把 θ 求出来了, θ=(XTX)−1XTy 。
在Octave中有函数可以直接求解:
pinv(X'*X)*X'*y
但并不是所有的数据都可以这样的,毕竟“逆”不是所有矩阵都有的……
当 XTX 不可逆时,主要有以下两种情况造成:
- 有冗余的特征
比如说 x1 = size of feet2 , x2 = size of m2
因为 1m=3.28feet ,所以实际上 x1 和 x2 是同一个特征在不同范围上而已。即:
x1=(3.28)2x2 - 特征太多(e.g.
m≤n
)
策略:删除部分特征,或者使用规范项regularization(下一节讲到)
下面是Gradient descent和Normal Equation的比较: