coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

多元线性回归

多元线性回归中的样本x包含多种特征

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

如上图所示,x包含了四种特征(面积,卧室数量,层数,已使用年数)。

符号说明:

n:样本的特征数量。

x(i):第i个样本(向量)。

xij:第i个样本的第j个特征值。

我们仍然假设函数是一条直线:hθ(x)=θ0+θ1x1+θ2x2+θ3x3+...+θnxn(注意n代表了样本的特征数量)

其中x0始终为1。所以上面两个函数是等价的。 

我们记

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

得到预测函数的向量表示:

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

其中,θT(转置)是一个规模为1×(n+1)的矩阵,X是一个规模为(n+1)×1的矩阵。假设函数的说明就到这里,下面我们来看看多变量的梯度下降法。

注意:在一次迭代过程中,必须同时更新每个θ。例如不能在更新了θ1之后,就把新的θ1用于更新后面的θ2,而应该使用上一次迭代产生的θ1来更新这一次迭代中的θ2

上面的

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

等价于

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

在执行足够次数的迭代 (iteration) 之后,我们就能取得最佳的 θj 的值。但是在特征(features)数量很大的情况下会遇到一个问题,那就是梯度下降算法可能会非常的慢,下面来看看原因与解决办法。

特征缩放

假设我们有如下场景:

对于样本x有两个特征值一个是房屋面积还有一个为房屋的卧室数量

x1 = size(0-2000 平方英尺)

x2 = 卧室数量(1-5个)

针对此场景的预测函数:

hθ(x)=θ1x1+θ2x2

代价函数:

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

由于x2对于x1来说非常小即θ2的参数非常小所以画出来的图像在坐标轴同等比例的情况下θ2的坐标轴的范围

会非常的大

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

那么假设梯度下降的起始位置选择在图像靠下的位置那么会导致递归的此时增多。

特征缩放(feature scaling),顾名思义,就是将特征的取值范围进行缩放,我们采用如下公式对特征进行缩放(还是以上面那个例子来解释):

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

x的两种特征值范围接近使得costJ的轻装比较均匀,无论梯度下降的初始值选择在哪里都能比较快速的到达局部最小值处。

另外需要说的是,我们一般会希望将每个特征的范围都缩放到 -1 与 1 之间,并且对于偏离这个范围不太大的特征不进行缩放

均值归一化(Mean normalization)

正如上面提到的,我们希望将每个特征的范围都缩放到 -1 与 1 之间,并且对于偏离这个范围不太大的特征不进行缩放。

Mean normalization的具体方法是用x(i)jμj (样本的特征值-其平均值)

来代替x(i)j以将特征的范围大致的约束在0的附近(一般为-1到1),注意我们不必对x(i)0=1进行归一化。其中μj表示特征xj的平均值。我们可将均值归一化公式总结为:

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

其中μj的意义已经说明了,S(j)表示第j个特征的范围。

学习速率

学习速率a如果太小会使得梯度下降迭代很多次才能收敛。

如果过大会造成如下情况:

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

过大的学习速率可能会使得代价函数的值一直增大或者一开始减小后来慢慢变大(越过了最优位置),也可能使得代价函数

的值周期性的变化但无法收敛。

如何选取一个合适的 α

关乎到 Gradient descent 的速率。一般的方法如下:
在自己选定的一个大致范围内进行debug。一般间隔为三倍的关系:

...,0.001,0.003,0.01,0.03,0.1,0.3,1,...

通过试验,选择一个最佳的学习速率,比如0.03。

特征和多项式回归(Features and Polynomial Regression)

这部分只是额外的一些关于选择假设函数的东西。下面看个例子,还是房价预测。

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

假设函数为:

hθ(x)=θ0+θ1×frontage+θ2×depth

x=Area=frontage×depth

得到的预测函数只有一个特征值(面积)

hθ(x)=θ0+θ1x

假设样本数据的分布情况为:

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

我们可能选则次数更高的函数比如二次函数(红色)

hθ(x)=θ0+θ1x+θ2x2

但是如图,我们发现二次函数的后半部分明显不符合数据的走向,总不可房子越大,价钱越低吧。

再来看看三次函数(绿色)

hθ(x)=θ0+θ1x+θ2x2+θ3x3

这个函数是比较合理的一个,另外还有一个函数也比较合适(黑色):

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

这里务必注意,对于本例子中的面积其实是一个特征,演化出了多种特征,若果选择了三次幂函数的多项式预测函数则必须

做特征缩放或者是均值归一化来加快梯度下降算法使其更快的收敛。

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

除了梯度下降算法求参数θ外还有一种方法叫做矩阵方程法

Normal equation(矩阵方程法)

θRn+1 时,误差函数为

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

我们只要对每个 θ 求偏导数,并使其为 0 即可求出每个 θ 的值,对于所有θ的偏导数值为0的时候可以得到一个代价函数的局部最小值。

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

求得所有的θ值即可。

假设我们有如下的训练数据(样本数量m=4,特征数量n=4

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

我们记

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

样本数据转换成了矩阵形式。

上面的 X 为一个 4×5 的矩阵, y 为一个 4×1 的向量(矩阵)。

假设我们有 m 组训练数据:(x(1),y(1)),(x(2),y(2)),...,x(m),y(m);其中每组数据均有 n 个特征。我们记:

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

这里的样本X矩阵加入了偏移项X0,值为1。

设参数向量为

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

我们希望得到的参数能够完美拟合样本数据集,则在理想条件下希望y=Xθ,y和X都是样本数据集的值。

根据向量的乘法我们知道:y=Xθ

首先在等式两边同时左乘一个 XT (X的转置矩阵),得到XTy=XTXθ

再在等式两边同时左乘一个 (XTX)1(XTX)的逆矩阵),得到(XTX)1XTy=(XTX)1(XTX)θ

消去(XTX)1(XTX)θ=(XTX)1XTy

梯度下降(gradient descent)和多项式回归(Features and Polynomial Regression)的比较

在数学计算的意义上,能够一下子就把 θ 的值给算出来,但是让我们来考虑一下这样一个事实: 我们需要计算一个式子 θ=(XTX)1XTy 的值,首先假设矩阵 X 是一个规模为 m×n 的矩阵,则仅仅计算 (XTX)1 的时间复杂度就为 O(n3)(在计算转置的时候仅是取值,不在内存上做真正的转置,即计算 XTX 需要的时间为 O(n2);另外,在计算逆矩阵的时候,我们只考虑了其伴随矩 (XTX) 阵直接乘以常数 1|XTX| 所需要的时间,而计算伴随矩阵和常数 1|XTX| (包括计算行列式的值)所需要的时间都未考虑,所以其计算花费是可想而知的)但是 Normal equation 也有一个好处就是不用对样本进行 Feature scaling

coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

我们如何来选择使用哪种方法么呢?这个就要跟着感觉走了。因为我们无法精确的得到选择Gradient descent还是Normal equation的阈值。一般如果 n 不超过1000的话,选用Normal equation还是挺好的,如果要是 n 超过10000的话,那么矩阵 X 的规模将是10000×10000,这时候Gradient descent将是一个更好的选择。

如果矩阵 (XTX) 不可逆怎么办呢,可能有如下两种原因:

1.存在冗余特征

    比如有两个特征

    coursera斯坦福大学机器学习笔记(3):多元线性回归(Linear Regression with multiple variables)

    因为 1m=3.28feet,所以 x1=(3.28)2x2。我们知道线性代数中出现这种线性相关的情况,其行列式值为0,所以不可逆,我们只需确保不会出现冗余特征即可。

2.特征数量 n 过多,而训练样本数 m 过少

    解决方法为删除一部分特征,或者增加样本数量。

以上内容借鉴机器学习笔记03