核函数的概念以及在SVM上的应用

2020-02-01  本文已影响0人  爱吃鱼的夏侯莲子

高斯核函数

激励函数中\theta^Tx=\theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n

现在准备用新的特征值f_1,f_2,... 来替换 x_1,x_2,...

f定义为两个向量的相似度:

例如,有一个标记向量l^{(i)},某个样本的特征向量x和其的相似度为:
f_i = similarity(x, l^{(i)}) = exp(-\frac{|| x-l^{(i)} ||^2}{2\sigma^2})

PS:|| x || 是 x向量的范数。

该核函数又称之为高斯核函数(Gaussian Kernels)

xl^{(i)}很相似时,f_i \approx 1;当两者差距很大时,f_i \approx 0

高斯核函数中有个关键参数\sigma,它的大小决定了,该函数值的变化速度。当\sigma很小时,f_i的变化就会很快,两个向量一点细微的差距就会本放大。当\sigma变大时,则相反:

举个例子,假设设计三个新的特征变量f_1,f_2,f_3
\theta_0 + \theta_1f_1 + \theta_2f_2 + \theta_3f_3 \geq 0时,通过预测函数h(\theta)预测为1。

我们假设\theta_0=-0.5, \theta_1=1, \theta_2=1, \theta_3=0

当样本x接近l_1时,f_1 \approx 1f_2 \approx 0f_3 \approx 0,可以得出上述表达式为-0.5 + 1 + 0 + 0 = 0.5,可以预测该样本的输出为1,以此类推,可以得出在标记向量l_1,l_2附近的向量即预测为1,远离的预测为0:

应用到支持向量机上

选取标记向量

在实际应用中,将每个样本作为标记向量。
假设有样本x^{(1)},x^{(2)},...,x^{(m)},同样的,将每个样本都定义为标记点,l^{(1)},l^{(2)},...,l^{(m)},即:x^{(1)}=l^{(1)},x^{(2)}=l^{(2)},...,x^{(m)}=l^{(m)}

对于某一个样本(x^{(i)},y^{(i)})来说:
f_1^{(i)} = similarity(x^{(i)}, l^{(1)})
f_2^{(i)} = similarity(x^{(i)}, l^{(2)})
...
f_i^{(i)} = similarity(x^{(i)}, l^{(i)})=1
...
f_m^{(i)} = similarity(x^{(i)}, l^{(m)})

PS:在这其中,第i个样本向量和第i个标记向量是同一个,所以值为1。

对于某一个样本的新的特征向量f^{(i)}=\left[ \begin{matrix} f^{(i)}_0 \\\ f^{(i)}_1 \\\ f^{(i)}_2 \\\ ... \\\ f^{(i)}_m \end{matrix}\right],同样的f^{(i)}_0始终为1,f是一个m+1的向量。

当使用新的特征值后,当\theta^Tf \geq 0时,即可预测输出值为1。

支持向量机的代价函数为:
J(\theta)=-C \sum_{i=1}^m [y^{(i)} cost_1(\theta^Tx) + (1-y^{(i)}) cost_0(\theta^Tx)] + \frac{1}{2} \sum_{j=1}^n \theta_j^2

将新的特征值替换到支持向量机的代价函数中去:

J(\theta)=-C \sum_{i=1}^m [y^{(i)} cost_1(\theta^Tf^{(i)}) + (1-y^{(i)}) cost_0(\theta^Tf^{(i)})] + \frac{1}{2} \sum_{j=1}^m \theta_j^2

可以看到将x^{(i)}替换成了f^{(i)}\sum_{j=1}^m \theta_j^2中是统计从1到m的参数了,因为,新的特征向量是m+1维向量,而且\theta_0不用修正。

核函数也可以用到逻辑回归上,但是这样计算成本会很高,速度会慢许多。而在SVM上,有许多针对核函数的优化方法,使得核函数在SVM上运行良好。

SVM使用事项

在使用SVM时一般都是使用第三方包提供的SVM优化算法,我们仅需提供:

参数C

参数C可以看作\frac{1}{\lambda},与\lambda相关的:

因此需要选取折中的C值,可以通过选取多个C值,然后在交叉验证集上简直多个C值的误差,选择最小的。

核函数选择

在核函数的选择上,一般有两种,一个是不用核函数,一个是高斯核函数。

不用核函数也称为线性核函数。它和逻辑回归的算法效果类似。当训练集有大量的特征值,但是样本数量不是太多时,这时拟合一个线性的边界条件会有比较好的效果,也即一般会不使用核函数或使用线性核函数。

高斯核函数 则需要去选择\sigma^2

参数\sigma^2

当训练集的特征值不是特别多,而且有大量的样本数量时可以选择高斯核函数。

当使用高斯核函数时,一个很重要的操作就是特征值的缩放,因为计算相似度时,会计算|| x-l^{(i)} ||^2,当每个特征值的取值范围相差很大时,求得的范数会受范围大的特征值的影响。为了避免这种情况,需要缩放到相近的范围内。

多分类问题

在处理多元分类问题时,与逻辑分类和神经网络类似,也是训练多个SVM训练器,然后比较取性能最好的一个。
更方便的方式是使用第三方的库函数来实现多元分类问题。

逻辑回归和SVM

定义:n = 样本的特征值数量,m = 样本的数量。

而神经网络算法,通常都会比这两者来的慢,且需要良好的设计才能取得较好的效果。而且使用SVM时不用担心遇到局部最优的问题。

转载自:
https://codeeper.com/2020/02/01/tech/machine_learning/svm_kernels.html

上一篇下一篇

猜你喜欢

热点阅读