量子位|SVM原理详细图文教程!一行代码自动选择核函数,还有实用工具( 二 )


尽管在开发实际使用的SVM模型时 , 会设计冗余 , 避免过拟合 , 但仍然需要想办法将误差控制在一个较小的范围 。
可以通过在模型中增加惩罚机制(用c表示)解决这个问题 。
量子位|SVM原理详细图文教程!一行代码自动选择核函数,还有实用工具
本文插图

量子位|SVM原理详细图文教程!一行代码自动选择核函数,还有实用工具
本文插图
设SVM输出结果为E , 则上图中出现的E=0则没有惩罚 。
如果c非常大 , 则模型分类更加精准 , 但支持向量到超平面距离小 , 容易出现过拟合 。
若c=1 , 则支持向量到超平面距离最大化 , 尽管会出现一些分类误差 , 但这是一种较好的方案 。
约束凸优化问题
为了克服约束凸优化问题 , 采用PEGASOS算法 。
重新构造一个约束独立性方程:
量子位|SVM原理详细图文教程!一行代码自动选择核函数,还有实用工具
本文插图

上式表示 , 如果点远离直线 , 则误差将为零 , 否则误差将为(1-t(i)) 。
我们需要最小化的是:
量子位|SVM原理详细图文教程!一行代码自动选择核函数,还有实用工具
本文插图

由于消除了约束 , 因此可以采用梯度下降来最大程度地减少损失 。
【量子位|SVM原理详细图文教程!一行代码自动选择核函数,还有实用工具】梯度下降算法计算损失:
在SVM上应用梯度下降:
非线性分类
使用SVM对非线性数据进行分类 , 需要将数据投影到更高的维度 , 即通过增加低维数据的特征向量将其转换为高维数据 。
增加数据特征向量需要消耗巨大的计算资源 , 这里采用核函数 。
而这种思路最难的点 , 是为你自己的模型选择一个合适的核函数 。
这里推荐一种自动调参方法GridSearch 。
将多种核函数(线性、RBF、多项式、sigmoid等)等标号 , 依次调用 , 找到一个最合适自己模型的 。
定义一个变量params:
params = [{‘kernel’:[‘linear’, ‘rbf’, ‘poly’, ‘sigmoid’], ‘c’:[0.1, 0.2, 0.5, 1.0, 2.0, 5.0]}
调用:
以上详细介绍了SVM背后的数学原理 , 并提供了一些使用SVM模型时的问题解决办法 。
其中 , 使用代码自动选择核函数的方法来自外国博主Daksh Trehan 。
如果你对SVM的原理有更深刻的理解 , 或有其他实用的技巧 , 请留言分享给大家吧 。


推荐阅读