选择特征(一千个特征,一千种模型)
以房价问题为例,假设数据集中有两个特征,分别是房子的宽度和长度,我们就可以建立一个这样的线性回归模型,其对应的假设函数
h
θ
(
x
)
=
θ
0
+
θ
1
×
f
r
o
n
t
a
g
e
+
θ
2
×
d
e
p
t
h
h_θ(x)=\theta_0+θ_1×frontage+θ_2×depth
hθ(x)=θ0+θ1×frontage+θ2×depth,
f
r
o
n
t
a
g
e
frontage
frontage 对应
x
1
x_1
x1,
d
e
p
t
h
depth
depth 对应
x
2
x_2
x2,但我们不一定非要使用这两个特征来进行预测,我们可以自己创造新的特征。
比如,对于上述的问题,我们觉得真正影响房价的是房子的大小,所以我们可以定义一个新特征 s i z e = f r o n t a g e × d e p t h size=frontage×depth size=frontage×depth,我们得到的假设函数就会是 h θ ( x ) = θ 0 + θ 1 × s i z e h_θ(x)=\theta_0+θ_1×size hθ(x)=θ0+θ1×size,所以,这实际上取决于我们从什么样的角度去看待问题,有时相比于使用原特征,从另一种角度出发定义一个新特征,可能会让我们得到更好的模型。
也就是我们说的“一千个特征,一千种模型”,这里指的对于不同的特征,我们往往会得到不同的模型,所以说,有时对特征进行合适的选择,也能够帮助我们得到更好的模型。
多项式回归
在之前的房价预测问题,我们都是使用一条直线来拟合数据,但是并不是所有的数据之间都是满足线性的关系,实际情况中,它们往往是更复杂的、非线性的关系,所以我们需要介绍一下如何拟合这类的数据
假设我们有如上图所示的一个住房价格的数据集,可能会有多个不同的模型都能跟这个数据集相拟合,选择之一就是这样的二次模型
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
h_θ(x)=\theta_0+θ_1x+\theta_2x^2
hθ(x)=θ0+θ1x+θ2x2,因为直线可能不能很好的拟合这些数据,因此,我们可能会考虑使用这样一个二次模型去拟合数据,我们会考虑到房价可能是一个二次函数,所以我们可能会得到下图所示的曲线
但是我们会发现二次模型也许并不是一个很好的选择,因为随着房子大小的增加,曲线逐渐演化为一个上凸函数,即房价在随之减小,显然,这不是我们预期的结果。因此,我们可能会选择一个不同的多项式模型,比如一个三次函数
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
h_θ(x)=\theta_0+θ_1x+\theta_2x^2+\theta_3x^3
hθ(x)=θ0+θ1x+θ2x2+θ3x3,那么,我们可能会得到下图所示的曲线
我们会觉得这条曲线比上一条曲线拟合的更好,因为它没有随着房子大小的增加反而呈现出下降的趋势。
那么,我们如何将模型与数据进行拟合呢?即如何得到多项式线性回归的模型呢?
之前,我们已经介绍了多元线性回归,通过使用多元线性回归的方法,我们可以对原来的算法做一个简单的修改,从而得到多项式线性回归的模型,如下图所示
按照我们以前的假设的形式,
我们得到的假设函数是
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
h_θ(x)=\theta_0+θ_1x_1+\theta_2x_2+\theta_3x_3
hθ(x)=θ0+θ1x1+θ2x2+θ3x3,
对比多项式模型的形式
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
h_θ(x)=\theta_0+θ_1x+\theta_2x^2+\theta_3x^3
hθ(x)=θ0+θ1x+θ2x2+θ3x3,所以,可以很容易的发现二者之间的联系,只要通过变量代换的方法就可以得到多项式回归的模型了,即令
x
1
=
s
i
z
e
,
x
2
=
s
i
z
e
2
,
x
3
=
s
i
z
e
3
x_1=size,x_2=size^2,x_3=size^3
x1=size,x2=size2,x3=size3。需要注意的是,如果我们使用这种次方的多项式模型,那么,进行特征缩放就显得尤为重要了,因为可能原始的范围很小,但是随着次方,特征量的范围会产生指数型增长。
上图是我们之前讨论的二次模型,我们发现二次模型随着房子大小的增加反而呈现出下降的趋势,所以我们使用了三次模型来代替它,但实际上除了三次模型,我们还有其他的选择,这里我们举出一个更合理的选择的例子,比如,
h
θ
(
x
)
=
θ
0
+
θ
1
s
i
z
e
+
θ
2
(
s
i
z
e
)
h_θ(x)=\theta_0+θ_1size+\theta_2\sqrt {(size)}
hθ(x)=θ0+θ1size+θ2(size),可以看到我们使用了平方根函数,很显然,如何选择合适的模型,一定程度上取决于你对这些函数图像的了解以及对数据变化趋势的了解。
至此,我们介绍了特征的选择,但是我们会想特征是无数多的,我们如何选择呢?后面我们会介绍能够帮助我们自动选择特征的算法,现在,我们只需要知道,我们是可以自由选择使用什么特征的,并且通过设计不同的特征,我们能够使用更加复杂的函数来拟合数据,而不是只是使用一条直线来拟合数据。