转自我的知乎回答:
机器学习里的 kernel 是指什么?
我换个角度来解释这个问题。
机器学习在做回归或者分类时有一个很朴实的想法:
预测 x 的值,那就在训练集 X 中寻找那些与 x 相似的样本,再把这些样本的值加权作为预测值。
这里有两个问题:
- 如何度量样本之间的相似性?
- 如何加权?
下面先看三个例子:
-
k近邻
。这个很熟悉,一般用欧式距离寻找离 x 最近的 k 个点,然后把对应的 y 等权重加权作为预测值。 -
Nadaraya-Watson估计
。在非参数估计中经常看到,距离越近的点,权重越大。
f^
(
x
⋆
)
=
∑
i
=
1
n
ω
i
y
i
\hat{f}(x_\star) = \sum_{i=1}^{n}\omega_iy_i
f
^
(
x
⋆
)
=
∑
i
=
1
n
ω
i
y
i
其中
wi
=
k
i
∑
j
=
1
n
k
j
w_i = \frac{k_i}{\sum_{j=1}^{n}k_j}
w
i
=
∑
j
=
1
n
k
j
k
i
,
ki
=
d
(
x
i
,
x
j
)
k_i = d(x_i,x_j)
k
i
=
d
(
x
i
,
x
j
)
。
这里的
d(
x
i
,
x
j
)
d(x_i,x_j)
d
(
x
i
,
x
j
)
通常叫做核函数,但在这里无妨称之为距离函数。 -
线性回归
这个有必要好好解释下。设训练集为 (X,y) ,则回归参数是
β^
=
(
X
T
X
)
−
1
X
T
y
\hat{\beta} = (X^TX)^{-1}X^Ty
β
^
=
(
X
T
X
)
−
1
X
T
y
。新样本 x 的预测值为:
f(
x
)
=
x
T
β
^
f(x) = x^T\hat{\beta}
f
(
x
)
=
x
T
β
^
=x
T
(
X
−
1
X
)
T
X
T
y
= x^T(X^{-1}X)^{T}X^Ty
=
x
T
(
X
−
1
X
)
T
X
T
y
=x
T
(
X
−
1
X
)
T
(
x
1
,
⋯
 ,
x
n
)
y
= x^T(X^{-1}X)^{T}(x_1,\cdots,x_n)y
=
x
T
(
X
−
1
X
)
T
(
x
1
,
⋯
,
x
n
)
y
=∑
i
=
1
n
x
T
(
X
−
1
X
)
T
x
i
y
i
= \sum_{i=1}^n x^T(X^{-1}X)^{T}x_iy_i
=
∑
i
=
1
n
x
T
(
X
−
1
X
)
T
x
i
y
i
=∑
i
=
1
n
ω
i
y
i
=\sum_{i=1}^{n}\omega_iy_i
=
∑
i
=
1
n
ω
i
y
i
这不就是“加权”的形式么???
。两点说明:
1、
∑i
=
1
n
ω
i
≠
1
\sum_{i=1}^n\omega_i \neq 1
∑
i
=
1
n
ω
i
̸
=
1
,因此它不是一种通常意义上的权重。一般的权重有什么局限性?既然是 n 个值的加权平均,那预测值一定不会比样本最大值更大。
2、
ωi
=
x
T
(
X
T
X
)
−
1
x
i
T
\omega_i = x^T(X^TX)^{-1}x_i^T
ω
i
=
x
T
(
X
T
X
)
−
1
x
i
T
, X 中心化后,
(X
T
X
)
−
1
(X^TX)^{-1}
(
X
T
X
)
−
1
是协方差矩阵。这其实就是将 x 和
xi
x_i
x
i
标准化,再求内积。内积越大,表明两个样本越相似,因此权重越大。
ωi
\omega_i
ω
i
不满足
≥0
\geq0
≥
0
。
现在看到了,这三个模型,最关键的就是计算样本之间的距离。
最常用的是欧氏距离。如果欧式距离的效果不好,通常我们会进行特征工程,新增或删除一些特征。特征向量变长或缩短,重新计算的距离就变化了。对于特征工程,可以参考我的另一个回答:
特征工程到底是什么?
核方法提供了另一个思维角度,跳过了对特征做处理,而是在原特征的基础上,构造一个新的距离
。距离解决了,其它的就水到渠成了。
从空间映射的角度讲,核函数对应了一个再生核希尔伯特空间(RKHS),原空间中的向量在RKHS中变成了一个函数。核函数度量的距离就是RKHS空间中函数之间距离,等价于函数在RKHS基函数上的投影构成的向量的欧式距离。
其实,特征工程对核方法也有作用,这一点很少有人提。前面不少回答都举了类似于下面这样例子,二维空间中不可分的点到了三维空间就可分了。
这种情况是相当理想了,很多时候你根本不知道核函数将数据映射成了什么样子,映射后的数据变得更差也有可能。
以squared exponential核为例:
k
(
x
i
,
x
j
)
=
exp
(
−
∣
∣
x
i
−
x
j
∣
∣
2
2
l
2
)
k(x_i,x_j)=\exp(-\frac{\vert\vert x_i-x_j\vert\vert^2}{2l^2})
k
(
x
i
,
x
j
)
=
exp
(
−
2
l
2
∣
∣
x
i
−
x
j
∣
∣
2
)
可以看到核函数 k 等权重依赖于每一个特征,如果
x
i
x_i
x
i
和
x
j
x_j
x
j
的某个特征相差很大,但其实这个特征与 y 没有关系,是不是就出问题了?
一个办法是先筛选那些与 y 相关的特征(注意是相关,不只是线性相关),例如用distance corelation,然后再选择核函数和相关参数。