SVM(支持向量机)
- 类型:二分类模型
- 针对:线性不可分问题
- 方法:通过核函数将实例中的特征映射为空间中的一些点,
- 目标:画出一条线,最好的区分两类点
- 适用情况:中小型数据、非线性、高维、分类问题
- 思想:在无法线性分割高维数据的非线性问题中,希望用超平面这样一种类线性的方法来分割高维数据。这需要将数据
一、相关概念
-01-决策面/超平面:用于确定方向,样本特征是高维的
-02-最优决策面:能完全分类的决策面
-03-分类间隔:最优决策面前提下的虚线间隔
-04-SVM最优解:最大的分类间隔下的情况,margin越大,分错的概率越小,鲁棒性越强。
-05-支持向量:最优解情况下虚线穿过的样本点,也就是支持这种最优情况的样本点。
-06-核函数(kernel):将向量的维度从低维映射到高维,降低运算复杂度。
二、Python实现
X = [[2, 0], [1, 1], [2,3]]
y = [0, 0, 1]
from sklearn import svm
clf = svm.SVC(kernel = 'linear') # .SVC()就是 SVM 的方程,参数 kernel 为线性核函数
clf.fit(X, y)
print(clf.predict([[2,0]])) # 预测一个新的点
print(clf) # 打印分类器 clf 的一系列参数
print(clf.support_vectors_)
print(clf.support_) # 属于支持向量的点的 index
print(clf.n_support_) # 在每一个类中有多少个点属于支持向量
三、SVM算法特性
- 训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以 SVM 不太容易产生 overfitting。
- SVM 训练出来的模型完全依赖于支持向量,即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型。
- 一个 SVM 如果训练得出的支持向量个数比较少,那么SVM 训练出的模型比较容易被泛化。