一:SVM的基本原理:
SVM用于进行二分类问题,对于一组二分类训练集,
, i=1,..., n,
;SVM求解如下的优化问题
![x_i \in \mathbb{R}^p](http://scikit-learn.org/stable/_images/math/3c2810ae28117c8ad2d9464adc7f57ad2143887c.png)
![y \in \{1, -1\}^n](http://scikit-learn.org/stable/_images/math/ede528003a9c8d8f47c5e4c3c8ed4dc0056b8c36.png)
![\min_ {w, b, \zeta} \frac{1}{2} w^T w + C \sum_{i=1}^{n} \zeta_i \textrm {subject to } & y_i (w^T \phi (x_i) + b) \geq 1 - \zeta_i,\ & \zeta_i \geq 0, i=1, ..., n](http://scikit-learn.org/stable/_images/math/afe25ea32dba823e13d2ae45b439d4529cd15364.png)
注:该问题目标函数经过(1)距离最大到w^2最小;(2)对于软间隔问题,加松弛因子
,其中C为惩罚因子,越大代表对于离群点越重视,当C无穷大,则代表为硬间隔情况。(3)
表示原空间已经进行了空间升维。(4)其中的
为对应每一个样本的松弛因子,(slack variables)其原型是集中损失函数,包括【0/1损失函数,hinge损失,指数损失,对率损失】其中hinge损失效果较好。
以上问题是二次规划问题,可以通过拉格朗日乘子法将其转化为一个对偶问题,
注:(1)C是一个上界(2)Q是正对称矩阵
,
是核函数(3)以上需要满足KKT条件。
二:sk-learn实现
1.基本实现
>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
2.显示所得支持向量