SVM支持向量机

SVM

支持向量机,用于向量空间的分类,属于数据挖掘中的分类算法。其过程就是接受训练数据(即有明确类标号的数据),构造其特征向量,对应在多维空间上的点,使用SVM算法找出一个最大边缘超平面,使得它的左右两侧分为两种不同的类别。这样就能够得到一个分类器。

线性可分:如二维空间中,可以找出一条直线,使得直线的上下两侧为两种不同的类别。
线性不可分:无法找到上述的直线,但是可以通过把这些点映射到高维空间中,从而达到在高维空间中线性可分的目的。所以本质上,最终都是要解决线性可分的问题,而这个问题也是SVM的核心问题。
空间映射:如何实现低维到高维空间的映射?核函数!对于线性不可分的数据,我们可以将它映射到线性可分的新空间中,之后就可以用硬间隔支持向量机或软间隔支持向量机来进行求解了。这样,我们将原问题变成了如何对原始数据进行映射,才能使其在新空间中线性可分。

核函数(kernel): linear(线性),poly(多项式),RBF(径向基函数),sigmoid

应用及问题

SVM算法中关键部分
1. 寻找线性可分的scale(最大边缘超平面);
2. 低维到高维空间的映射;

寻找出scale的过程涉及到复杂的数学推理,而且低维到高维的空间映射涉及到核函数的知识。

优缺点:SVM算法在海量数据中的运行时间可能是立方级的,而且对于一些不是很明显分类的数据集,运用SVM算法的准确度可能不及朴素贝叶斯,因为会存在过度拟合的问题(噪声点对SVM算法的影响会比较大)。
实例测试中需要频繁调整参数Cgamma以得到更好的预测结果, 但是工具GridCV,一种几乎能自动查找最优参数调整的优秀 sklearn 工具。

scikit-learn代码

from sklearn import svm
# 选择核类型
clf = svm.SVC(kernel="linear")
# 训练模型
clf.fit(features_train, labels_train)
# 得到预测分类数据
pre = clf.predict(features_test)

SVC参数:

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)

# gamma 核函数的系数, 默认是 gamma = 1 / n_features
# C 目标函数的惩罚系数C,用来平衡分类间隔margin和错分样本的,default C = 1.0, C越大,说明尽可能的分开训练数据

参考

SVM详细讲解
SVM简介入门

你可能感兴趣的:(经典算法,svm,数据挖掘)