zoukankan      html  css  js  c++  java
  • 机器学习技法--学习笔记03--Kernel技巧

    背景

    上一讲从对偶问题的角度描述了SVM问题,但是始终需要计算原始数据feature转换后的数据。这一讲,通过一个kernel(核函数)技巧,可以省去feature转换计算,但是仍然可以利用feature转换的特性。

     

    什么是kernel

    Kernel的其实就是将向量feature转换与点积运算合并后的运算,如下,

    概念上很简单,但是并不是所有的feature转换函数都有kernel的特性。

     

    Kernel化的SVM

    在对偶化的SVM解中,有三个地方会使用到kernel

    • 计算截距b
    • 计算QP中的Q矩阵
    • 预测分类

    使用了kernel,w的具体值都无需计算,因为没有地方会直接使用w。这也是为什么上一讲花了那么大的精力描述对偶化的SVM解。

     

    常见kernel

    常见kernel有多项式,高斯和线性,各有利弊。

     

    线性kernel

    不做feature转换,直接使用。不需要使用对偶技巧,直接使用linear hard SVM解。

    优点:计算效率高;结果解释性好。

    缺点:需要数据线性可分

     

    多项kernel

    对x进行多项式展开,一般的形式为

    其中a,b,Q为常量。

    优点:相比线性kernel,对数据要求没有那么严格

    缺点:需要选择的系数较多;Q太大会超出一些计算机的精度,一般Q<=3。

     

    高斯Kernel

    有些资料也称为RBF(Radial Base Function),一般形式为

    其中a(>0)是常量。高斯kernel厉害的地方是可以将原始数据x映射到无线维度空间中,x下面取a=1的例子

    上面的变化采用了Taylor展开,接着

    其中特征转化为

    这样,就完成了向无线维度转换,RBF是不是很厉害!

    优点:调试的系数较少;比线性和多项式更强大,几乎可以适应所有数据;不容易出现计算精度问题

    缺点:无线维度无法解释;太强大,容易过拟合;计算开销大。

     

    总结

    个人感觉,核函数是SVM画龙点睛之笔,真的很佩服发现kernel的科学家。在实际使用SVM的过程中,很大一部分精力可能就是选择kernel和相关系数。Kernel还可以自定义,但是需要满足一些条件,具体可以参考讲义相关部分。

  • 相关阅读:
    Jmeter跨线程组传值
    python基础之高级函数
    Python基础之函数的应用
    python基础之文件的输入输出
    python基础练习之猜数字
    折腾了两天的跨站脚本提交问题,与IIS7有关
    python简介和环境搭建
    python paramiko
    Linux rsync 企业级应用
    Linux find 命令详解
  • 原文地址:https://www.cnblogs.com/bourneli/p/4202423.html
Copyright © 2011-2022 走看看