吴恩达机器学习笔记44-核函数(Kernels)
回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类
问题:
为了获得上图所示的判定边界,我们的模型可能是𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥2 + 𝜃3𝑥1𝑥2 + 𝜃4𝑥²1 +𝜃5𝑥²2 + ⋯的形式。
我们可以用一系列的新的特征f 来替换模型中的每一项。例如令: 𝑓1 = 𝑥1, 𝑓2 = 𝑥2, 𝑓3 =𝑥1𝑥2, 𝑓4 = 𝑥²1, 𝑓5 = 𝑥²2
...得到ℎ𝜃 (𝑥) = 𝜃1𝑓1 + 𝜃2𝑓2+. . . +𝜃𝑛𝑓𝑛。然而,除了对原有的特征进行组合以外,有没有
更好的方法来构造𝑓1, 𝑓2, 𝑓3?我们可以利用核函数来计算出新的特征。
给定一个训练实例𝑥 , 我们利用𝑥 的各个特征与我们预先选定的地标
(landmarks)𝑙(1), 𝑙(2), 𝑙(3)的近似程度来选取新的特征𝑓1, 𝑓2, 𝑓3。
例如:
其中:
为实例𝑥中所有特征与地标𝑙(1)之间的距离的和。
上例中的𝑠𝑖𝑚𝑖𝑙𝑎𝑟𝑖𝑡𝑦(𝑥, 𝑙(1))就是核函数,具体而言,这里是一个高斯核函数(Gaussian Kernel)。
注:这个函数与正态分布没什么实际上的关系,只是看上去像而已。
这些地标的作用是什么?如果一个训练实例𝑥与地标𝐿之间的距离近似于0,则新特征 𝑓近似于𝑒−0 = 1,如果训练实例𝑥与地标𝐿之间距离较远,则𝑓近似于𝑒−(一个较大的数) = 0。
假设我们的训练实例含有两个特征[𝑥1 𝑥2],给定地标𝑙(1)与不同的𝜎值,见下图:
图中水平面的坐标为 𝑥1,𝑥2而垂直坐标轴代表𝑓。可以看出,只有当𝑥与𝑙(1)重合时𝑓才
具有最大值。随着𝑥的改变𝑓值改变的速率受到𝜎2的控制。
在下图中,当实例处于洋红色的点位置处,因为其离𝑙(1)更近,但是离𝑙(2)和𝑙(3)较远,因
此𝑓1接近1,而𝑓2,𝑓3接近0。因此ℎ𝜃 (𝑥) = 𝜃0 + 𝜃1𝑓1 + 𝜃2𝑓2 + 𝜃1𝑓3 > 0,因此预测𝑦 = 1。同
理可以求出,对于离𝑙(2)较近的绿色点,也预测𝑦 = 1,但是对于蓝绿色的点,因为其离三个
地标都较远,预测𝑦 = 0。
这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选
取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通
过核函数计算出的新特征𝑓1, 𝑓2, 𝑓3。
如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则我们选
取𝑚个地标,并且令:𝑙(1) = 𝑥(1), 𝑙(2) = 𝑥(2), . . . . . , 𝑙(𝑚) = 𝑥(𝑚)。这样做的好处在于:现在我们
得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:
• 给定𝑥,计算新特征𝑓,当𝜃𝑇𝑓 >= 0 时,预测 𝑦 = 1,否则反之。
相应地修改代价函数为:
在具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算
时,
我们用𝜃𝑇𝑀𝜃代替
𝜃𝑇𝜃,其中𝑀是根据我们选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。
理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 𝑀来简化计算的方法
不适用与逻辑回归,因此计算将非常耗费时间。
在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如
liblinear,libsvm 等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核
函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),
当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采
用这种不带核函数的支持向量机。
下面是支持向量机的两个参数𝐶和𝜎的影响:
𝐶 = 1/𝜆
𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致低方差,高偏差;
𝜎较小时,可能会导致低偏差,高方差。