机器学习算法之二:SVM(支持向量机)

Posted 南山的清野悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习算法之二:SVM(支持向量机)相关的知识,希望对你有一定的参考价值。


    支持向量机的首要基准是要分类正确,在满足合格条件情况下,再遵循间隔最大化条件。间隔最大化保证了决策边界的健壮性。

实现方法如下:

#导入库
from
sklearn import svm
#训练特征
X = [[0, 0], [1, 1]]
#训练标签
y = [0, 1]
#创建分类器
clf = svm.SVC()
#使用训练特征和训练标签进行拟合
clf.fit(X, y)

#训练完成后进行预测
clf.predict(([2,2]))
#预测结果属于y[1]
array[1]

    SVM都是线性可分割的,如何分割非线性?

解决方法在于将特征值和特征标签做函数运算。

例如:

    经过引入新特征Z后,非线性转化为了线性便可以支持SVM。以圆的形式学习非线性决策面。

机器学习算法之二:SVM(支持向量机)

    下面请看这个图,如何引入新特征使之能支持SVM?

    答案是|X|,x的绝对值,自己体会。


    是不是这样?是的。

    那么问题来了,是不是需要写一堆的代码来实现这种转换呢?

    我们知道,简单是Python的特征。OK,言归正传。

    在SVM中,有一种叫做核(kernels)技巧的东西,用来获取低维度输入空间或者特征空间,将其映射到极高维度空间的函数。使得不可线性分割的内容转换为线性可分离问题,然后在使用SVM解决问题。这也是向量机的一个重要优点。有了这个技术我们可以很轻松的找到线性分类器。

    那么如何使用这些核呢?class sklearn.svm.SVC(C=1.0kernel=’rbf’degree=3gamma=’auto’coef0=0.0shrinking=Trueprobability=Falsetol=0.001cache_size=200class_weight=Noneverbose=Falsemax_iter=-1decision_function_shape=’ovr’random_state=None)

    参数的第二个就是核。常见的核有线性(linear)、多项式(poly)、径向基函数(rbf)、sigmoid等等。

    另外,参数中的C和gamma也是影响SVM决策边界准确性的关键参数。

    C:越大,得到的决策边界更复杂,但决策更精准。

    gamma:越大,得到的决策边界也越拟合的完美。

    但两者并非越大越好,越大则计算量越大,越容易出现过拟合。

    过拟合是机器学习的大忌。三个参数:kernels、C、gamma设置不恰当都能引起过拟合。防范过拟合的办法是需要我们自己对参数进行调整,用可视化技术对其进行校准。

    SVM的优缺点:

    SVM在复杂领域和边界较为明显的情况下,表现相当出色。

    但在海量数据时,表现就不太好。计算量指数级增加,多噪声也会左右其精准性(此时朴素贝叶斯则会表现突出)。


以上是关于机器学习算法之二:SVM(支持向量机)的主要内容,如果未能解决你的问题,请参考以下文章

机器学习入门之四:机器学习的方法--SVM(支持向量机)(转载)

机器学习算法及代码实现–支持向量机

机器学习算法——SVM支持向量机(Ⅱ)

机器学习的分类算法之SVM(支持向量机)

机器学习算法-python实现svm支持向量机—理论知识介绍

白话机器学习算法理论+实战之支持向量机(SVM)