kingzone 2019-06-16
机器学习系列18:核函数
让我们来考虑这样一个问题,现在给定一个数据集,让你划分出决策边界,该怎么办呢?数据集中正样本为「叉」,负样本为「圈」,如下图:
第一反应就是用一个高阶多项式去构造一个假设函数,当假设函数大于等于零时,我们就可以认为它为正样本,否则为负样本,类似下面这种形式:
但是有一个问题出现了,我们不能确定构造的假设函数就是最符合这个例子的高阶多项式,可能还有其他的高阶多项式能够更好地符合这个例子。
为了解决这样一个问题,我们首先来引入新的符号,用 f 替换原来多项式中的 x,假设函数就变成了如下这种类型:
现在问题就转化成如何选择特征 f?我们可以通过核函数(Kernels)改造支持向量机让它来学习复杂的非线性假设函数。
对于特征 x_1 和 x_2,我们首先手动的选取几个点 l^(1), l^(2), l^(3), 这些点被称作标志(landmark), 然后令:
其中:
这里的 similarity( ) 是相似度函数,被称为核函数(Kernels),也叫做高斯核函数(Gaussian Kernel)。虽然这个函数跟正态分布函数长得很像,但其实比没有什么关系。
现在我们来分析一下这个函数,当 x 与 l 几乎相等时,这一项:
就等于 0,那么 f =1。当 x 与 l 差距很大时,f = 0。
让我们用图像去直观地感受一下:
图像中高度为 f 的值,x 越接近 l ,f 就越处在「山丘」的顶部。山丘的形状还与 σ^2 有关。
σ^2 越小,「山丘」越「瘦高」,σ^2 越大,「山丘」越「胖矮」。
在下面这张图中,假设我们已经手动寻找了标志且构造了一个假设函数:
参数也知道了:
现在观察粉红色的点,它离 l^(1) 近,f1 = 1,离 l^(2) , l^(3) 远,f2 和 f3 都为 0,此时假设函数大于 0,我们就可以预测这是一个正样本。
再来观察浅蓝色的点:
离 l^(1) , l^(2) , l^(3) 都远,f1,f2,f3 都为 0,假设函数就小于 0,我们就可以认为这是一个负样本。通过这样的判断,我们就可以画出一个决策边界:
如何选择标记点呢?我们可以将训练集所在的位置直接当做样本点来处理。