在前面的章节中,我们仅仅使用了一个变量
x
x
x,接下来我们将考虑多个变量的影响。
x
j
x_j
xj:第
j
j
j个特征
n
n
n:表示特征的数目,有
n
n
n列
x
⃗
(
i
)
\vec{\mathrm{x}}^{(i)}
x(i):表示第
i
i
i个训练示例,也可以称为一组行向量
x
j
(
i
)
x_{j}^{(i)}
xj(i):表示第
j
j
j个特征的第
i
i
i个训练示例
我们可以将上面的逐个相乘再相加的式子写成一个向量之间点乘的形式,更加简洁。通过引入多个特征,这也被称为多元线性回归。
向量化
对于
f
w
,
b
(
x
)
f_{w,b}(x)
fw,b(x)的表示我们有三种不同的方式,分别为直接相加,循环,使用向量表示。前两者不仅在编写上不如第三种,而且由于考虑到numpy可以实现GPU加速,在运算速度上也是胜过前两者。
可以看到由于numpy可以将
w
,
x
w,x
w,x之间并行处理,不需要一步步的计算,因此速度远远快于累加的循环方法。
梯度下降
我们将
w
w
w向量化,可以得到右边的式子。
需要注意
w
j
w_j
wj的计算,最后的
x
j
(
i
)
x_{j}^{(i)}
xj(i)是一个数,而不是一个向量。
特征缩放
像上面这个例子一样,由于面积这个特征的取值范围远远大于房间数目这个取值范围,因此我们可能会需要一个更聪明的模型才可以选择一个合适的
w
1
,
w
2
w1,w2
w1,w2使得预估结果更加合理。
即使我们的模型足够聪明,选择了合适的
w
1
,
w
2
w1,w2
w1,w2。但是我们可以看到上边两幅图中的特征值和等高线的分布都是十分不均匀的,这可能会导致我们在进行梯度下降的时候会折返多次。这时候就需要我们对于特征值进行一些缩放,使其可以更加均匀的分布,在进行梯度下降时可以更快的得到最小值。
- 直接缩放
采用直接除以最大值的方式,使其范围在
[
0
,
1
]
[0,1]
[0,1]之间。
- Mean normalization
使用
x
n
e
w
=
x
−
m
e
a
n
(
x
)
m
a
x
(
x
)
−
m
i
n
(
x
)
x_{new}=\frac{x-mean(x)}{max(x)-min(x)}
xnew=max(x)−min(x)x−mean(x),通过减去均值在除以范围,使得范围在
[
−
1
,
1
]
[-1,1]
[−1,1]之间。
- Z-score normalization
使用
x
n
e
w
=
x
−
μ
σ
x_{new}=\frac{x-\mu}{\sigma}
xnew=σx−μ,将数据变换为均值为
0
0
0,标准差为
1
1
1的分布切记,并非一定是正态的,只有原来就是正态分布才会变成标准正态化。
同时由于这些变化都是线性的,对于数据本身的顺序不会造成影响。
数据标准化和归一化 方法小结 - 数说张小桃 - 博客园
梯度下降收敛
通过左边的曲线我们看到当迭代次数达到
300
300
300时,我们的曲线的减少已经接近为0,在
400
400
400时已经接近于平衡。同时我们也可以使用一个
ϵ
\epsilon
ϵ来进行判断,当减少量小于这个数时,代表该曲线已经收敛。
选择合适的学习率
如果曲线不是呈现前面的逐渐下降直到最终趋近于平衡的话,而是不断起伏或者上升,那么就代表程序本身出现了bug或者学习率设置的过大,使得无法找到最小值,这时候我们需要调整这个数,使得曲线可以慢慢下降到最小。
在最开始选择一个很小的学习率,不断地增大直到无法收敛,然后根据这样找到一个合适的值。
特征工程
有时候原生特征不能完全满足预测的要求,那么可以根据一个或者多个原生特征衍生出其它可用或不可用的特征,这一过程称为“特征衍生”。特征衍生是特征工程一个比较重要的组成部分,它需要花费比较多的精力和时间尽量去认识原生特征和具体的预测命题,然后根据原生特征的特点构造出一些衍生特征。
例如我们一开始使用长度和宽度分别作为特征进行预估,但是可以使用这两个值的乘积也就是面积作为新的特征进行预测,使得结果更加精准。
多项式回归
我们已经使用了很久的
f
(
w
,
b
)
=
w
x
+
b
f(w,b)=wx+b
f(w,b)=wx+b,现在让我们使用一个曲线来更好地拟合这些数据。
我们可以使用不同的多项式函数,使得我么的曲线更好的拟合数据。
正规方程
我们可以看到当偏微分为
0
0
0时,我们可以得到这个代价函数的最小值。
根据以上推导我们可以得到一个公式
θ
=
(
X
T
X
)
−
1
X
T
y
⃗
\theta=\begin{pmatrix}X^TX\end{pmatrix}^{-1}X^T\vec{y}
θ=(XTX)−1XTy,通过这个式子我们无需在进行迭代可以直接得到我们需要的
θ
\theta
θ。
对于其它的方式也可以参看刘建平老师的博客
机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则 - 刘建平Pinard - 博客园
假如我们有
m
m
m个训练样本,
n
n
n个特征变量。
梯度下降法 | 正规方程 |
---|---|
缺点: 1. 需要选择学习速率 α α α。 2. 需要更多次的迭代 3. 特征值范围相差太大时需要进行特征缩放。 | 缺点: 1. 当特征数 n n n很大时,运算的很慢,因为求解逆矩阵的时间复杂度很高,属于 O ( n 3 ) O(n^3) O(n3)。 |
优点: 1. 当特征数 n n n很大时,也可以正常工作。 | 优点: 1. 不需要选择学习速率 α α α。 2. 不需要多次迭代 3. 不需要特征缩放 |
当 n < 10000 n<10000 n<10000时,通常使用正规方程,当 n > = 10000 n>=10000 n>=10000时,要考虑使用梯度下降。一些更加复杂的算法仅可以使用梯度下降。 |
同时我们需要注意并不是所有的情况
X
T
X
X^TX
XTX都是可逆的,当
X
X
X中的特征
X
1
,
X
2
X1,X2
X1,X2出现线性相关时,或者需要的特征数
n
n
n大于等于(
n
n
n等于
m
m
m时需要满足
d
e
t
(
X
)
det(X)
det(X)不等于
0
0
0)给出的样本数
m
m
m的个数时会出现不可逆的现象。从数学的角度来看就是矩阵不满秩。
可以采取的措施就是删掉一些多余的特征,或者使用正则化。