特征工程
在前面的章节中,我们在讲房子价格预测问题的时候,提到了房子的价格可以有很多特征
假设现在h的式子如上所示,这是一个有两个特征的线性假设公式,不难发现有frontage(代表长)和depth(宽)两个特征,看到长和宽,我们会自然想到占地面积
那我们可不可以用占地面积来做特征呢,是否以占地面积为特征可以同时表示长和宽两个特征呢?
答案是可以的,并且将会比原来用长和宽作为特征要更好(因为现实中也是将占地面积作为重要判断标准的,而非长宽)
(上图中用面积x作为特征,面积=长*宽)
因此,即使面对同样的特征,也可以得到不同的方案,这取决于你看待问题的角度。
特征工程说明了,有时我们通过变形或者组合原有特征所得到的新特征可以得到更好的模型。
多项式回归
依旧是住房问题,我们看看上方给出的图片。
图中有两条曲线:一条是二次函数的蓝线,一条是三次函数的绿线,根据现在给出的数据来看,二者的拟合程度是差不多的,那么我们应该选择几次项来拟合呢?
答案是三次项,首先一次项的拟合程度一定是最差的。训练集整体的走向看起来就像是二次或者三次函数。
虽然二次函数看起来比三次函数更加拟合,但是如果选择二次函数就会发现一个问题:这个二次函数是开口向下的,也就是说接下来它的price将会往下走,而这是不可能的,因为横轴代表的是房子的大小,不可能会出现房子越大,价格越低的情况,因此我们不能用二次函数来拟合。
所以,三次函数显然才是更好的选择。
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
h_θ(x)=θ_0+θ_1x_1+θ_2x_2+θ_3x_3
hθ(x)=θ0+θ1x1+θ2x2+θ3x3
=
θ
0
+
θ
1
(
s
i
z
e
)
+
θ
2
(
s
i
z
e
)
2
+
θ
3
(
s
i
z
e
)
3
=θ_0+θ_1(size)+θ_2(size)^{2}+θ_3(size)^3
=θ0+θ1(size)+θ2(size)2+θ3(size)3
x
1
=
(
s
i
z
e
)
x_1=(size)
x1=(size)
x
2
=
(
s
i
z
e
)
2
x_2=(size)^2
x2=(size)2
x
3
=
(
s
i
z
e
)
3
x_3=(size)^3
x3=(size)3
另外还要注意,由于特征涉及指数运算的,因此特征缩放就显得尤其重要,在梯度下降算法中需要保持特征范围在可接受的范围内。
初三次之外,
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
h_θ(x)=θ_0+θ_1x_1+θ_2\sqrt{x_2}
hθ(x)=θ0+θ1x1+θ2x2也是一种不错的假设函数,
在选择拟合的假设函数的过程中,通过对图像的理解选择更好的假设函数有助于我们拟合的效率
正规方程
在梯度下降那一章中,我们讲到了局部最小值 θ θ θ所在的点其实就是这个邻域内的驻点,因此要求出这个点只需对代价函数 J ( θ ) J(θ) J(θ)求 θ j θ_j θj的偏导,并使其 = 0 =0 =0再解出即可,如果你学习了微积分相关知识就能理解。
也就是说梯度下降未必需要完全迭代才能得到这个 θ θ θ的值,事实上我们完全可以通过计算把它先算出来。
现在我们有一个四个特征的训练集,想要得出使代价函数最小的
θ
θ
θ,我们当然也能通过计算得出。
首先别忘了加上常数项
x
0
=
1
x_0=1
x0=1
我们用所有的特征
x
j
x_j
xj来构建一个特征矩阵
X
X
X,矩阵
X
X
X包含了所有训练样本中的所有特征
其中,
x
(
1
)
=
[
1
2104
5
1
45
]
x^{(1)}=\begin{bmatrix} 1 \\ 2104 \\ 5 \\ 1 \\ 45 \end{bmatrix}
x(1)=
121045145
,
x
(
i
)
=
[
x
0
(
i
)
x
1
(
i
)
x
2
(
i
)
x
3
(
i
)
x
4
(
i
)
]
x^{(i)}=\begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ x^{(i)}_3 \\ x^{(i)}_4 \end{bmatrix}
x(i)=
x0(i)x1(i)x2(i)x3(i)x4(i)
,
最终得到的矩阵
X
=
[
x
0
(
1
)
x
1
(
1
)
x
2
(
1
)
x
3
(
1
)
x
4
(
1
)
x
0
(
2
)
x
1
(
2
)
x
2
(
2
)
x
3
(
2
)
x
4
(
2
)
x
0
(
3
)
x
1
(
3
)
x
2
(
3
)
x
3
(
3
)
x
4
(
3
)
x
0
(
4
)
x
1
(
4
)
x
2
(
4
)
x
3
(
4
)
x
4
(
4
)
]
X=\begin{bmatrix} x^{(1)}_0 & x^{(1)}_1 &x^{(1)}_2 &x^{(1)}_3 &x^{(1)}_4\\ x^{(2)}_0 & x^{(2)}_1 &x^{(2)}_2 &x^{(2)}_3 &x^{(2)}_4\\ x^{(3)}_0 & x^{(3)}_1 &x^{(3)}_2 &x^{(3)}_3 &x^{(3)}_4 \\ x^{(4)}_0 & x^{(4)}_1 &x^{(4)}_2 &x^{(4)}_3 &x^{(4)}_4 \\ \end{bmatrix}
X=
x0(1)x0(2)x0(3)x0(4)x1(1)x1(2)x1(3)x1(4)x2(1)x2(2)x2(3)x2(4)x3(1)x3(2)x3(3)x3(4)x4(1)x4(2)x4(3)x4(4)
,
同样地,我们将所有结果样本构建矩阵
y
y
y
也就是说,我们可以用两个矩阵
X
y
Xy
Xy的关系来表示出所要求的
θ
θ
θ。
最小二乘估计
最小二乘估计公式如下:
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
以下是二乘估计公式的证明过程:
设
y
=
X
⋅
θ
y=X\cdotθ
y=X⋅θ
首先运用求驻点的公式,我们需要求出满足所有偏导都为0的矩阵
θ
θ
θ,
{
∂
J
(
θ
)
∂
θ
1
=
0
∂
J
(
θ
)
∂
θ
2
=
0
.
.
.
.
.
.
∂
J
(
θ
)
∂
θ
n
=
0
\begin{cases} \frac{∂J(θ)}{∂θ_1}=0 \\ \frac{∂J(θ)}{∂θ_2}=0 \\ \ ...... \\ \frac{∂J(θ)}{∂θ_n}=0 \end{cases}
⎩
⎨
⎧∂θ1∂J(θ)=0∂θ2∂J(θ)=0 ......∂θn∂J(θ)=0 分别解出所有
θ
θ
θ值,得到矩阵
θ
=
[
θ
1
θ
2
.
.
.
θ
n
]
θ=\begin{bmatrix} θ_1 \\ θ_2 \\ ... \\ θ_n \end{bmatrix}
θ=
θ1θ2...θn
最小二乘法的原理是通过最小化误差(真实目标对象与拟合目标对象的差)的平方和,还记得这张图吗?
我们希望所有点
y
y
y到拟合曲线的距离之平方和最小,让我们用向量语言重新描述一下这张图:
如果用向量语言来讲,我们看一下(1,1)这个点,我们将红色向量称为向量a,紫色向量称为向量b,蓝色向量称为向量c,那么很明显
∥
c
∥
=
∥
a
−
b
∥
\lVert c\rVert=\lVert a-b\rVert
∥c∥=∥a−b∥
因此,求最小化误差的平方和,就是使得所有蓝色向量的欧几里得范数之平方和最小,并且每一个蓝色向量都可以表示为两个向量之差,而下方的红色向量,其实就是我们确定的拟合曲线
y
=
X
⋅
θ
y=X\cdotθ
y=X⋅θ,而上方紫色向量就是
y
y
y,因此,最小二乘法可以化为:
S
=
∥
X
⋅
θ
−
y
∥
2
S=\lVert X\cdotθ-y\rVert_2
S=∥X⋅θ−y∥2
证明过程参考Ordinary Least Square(OLS) 普通最小二乘
最终得到公式
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
通过这个公式,我们可以直接计算出
θ
θ
θ的值
比较梯度下降和正规方程
学习了这两种方法,我们来比较一下二者的优缺点:
梯度下降 | 正规方程 | |
---|---|---|
优点 | 1.当特征数量n较大时工作效率高 | 1.不需要选择学习率 2.不需要迭代 |
缺点 | 1.需要选择适当的学习率 2.需要多次迭代,同时要保证特征缩放 | 1.需要求解
(
X
T
X
)
−
1
(X^TX)^{-1}
(XTX)−1,而该式求解的时间复杂度是
O
(
n
3
)
O(n^3)
O(n3) 2.如果特征数量n较大时工作效率低 |
所以选择哪个方法由特征数量决定,当特征数量小于10000时,我们可以使用正规方程,当特征数量大于10000时最好使用梯度下降法。
另外
(
X
T
X
)
(X^TX)
(XTX)可能会出现不存在逆矩阵的情况,但是在计算机中并不影响计算。