美文网首页
核函数的概念以及在SVM上的应用

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

作者: 爱吃鱼的夏侯莲子 | 来源:发表于2020-02-01 09:08 被阅读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

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

    • C过大时,会导致高方差,过拟合的问题;
    • C过小时,会导致高偏差,欠拟合的问题。

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

    核函数选择

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

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

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

    参数\sigma^2

    • \sigma^2过小时,f核函数的变化速度会很剧烈,会导致高方差的现象;
    • \sigma^2过大时,f核函数的变化速度会很平缓,会导致高偏差的现象。

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

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

    多分类问题

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

    逻辑回归和SVM

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

    • 当n相对于m来时很大时,比如n=10000,m=1000时,这时选择逻辑回归或者不使用核函数的SVM;

    • 当n比较小,m中等大小,比如n=1000,m=10000时,选择SVM(使用高斯核函数)的效果会比较好;

    • 当n比较小,m非常大时,比如n=1000,m=50000+时,这时通常手动添加更多的特征值,然后使用逻辑回归或者不使用核函数的SVM来处理。

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

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

    相关文章

      网友评论

          本文标题:核函数的概念以及在SVM上的应用

          本文链接:https://www.haomeiwen.com/subject/kcsnthtx.html