机器学习(二):快速入门SVM分类

机器学习(二):快速入门SVM分类_第1张图片

定义

SVM便是根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个。仔细观察彩图中的蓝线,会发现决定其位置的样本并不是所有训练数据,而是其中的两个空间间隔最小的两个不同类别的数据点,而我们把这种可以用来真正帮助决策最优线性分类模型的数据点称为”支持向量“. (即支持向量就是离分隔超平面最近的那些点)。换句话说,找出能分离样本的一个最优平面距离超平面最近的训练样本的点被成为支撑向量,两个支撑向量距离超平面距离之和最远

其实,仔细研究线性分类和SVM会发现,线性分类的是不断调整函数中各个特征的权重,SVM就是在最好的线性基础上调整b的值。

常用的SVM分类API:LinearSVC 和svc

LinearSVC线性分类SVM,可用于二分类,也可用于多分类.

`class sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’, fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)`
  1. C: 罚项参数
  2. loss: 损失函数:’hinge’: 合页损失函数和‘squared_hinge’: 合页损失函数的平方
  3. penalty: 指定’l1’或’l2’,罚项范数,默认为 ‘l2’

svc 非线性分类SVM, 根据libsvm实现的,可用于二分类,也可用于多分类.

class 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=’ovr’, random_state=None)[source]
  1. C-SVC的惩罚参数C。默认值是1.0(C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。)
  2. kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
  3. degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
  4. gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features. ( 比较小时,单个样本对整个分类超平面的影响比较小,不容易被选择为支持向量,反之,当γ比较大时,单个样本对整个分类超平面的影响比较大,更容易被选择为支持向量,或者说整个模型的支持向量也会多。scikit-learn中默认’auto’)
  5. coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用

SVM分类的优点

SVM在中小量样本规模的时候容易得到数据和特征之间的非线性关系,可解释性强,可以解决高维问题。

SVM分类的缺点

SVM对缺失数据敏感,对非线性问题没有通用的解决方案,核函数的正确选择不容易,计算复杂度高,主流的算法可以达到O(n2)的复杂度,这对大规模的数据是吃不消的

特点

SVM曾经在机器学习研究领域繁荣了很长时间,主要原因在于其精妙的模型假设,可以帮助我们在海量甚至高维度的数据中,筛选对预测任务最为有效的少数训练样本。这样做不仅节省了模型学习所需要的数据内存,同时也提高了模型的预测性能。然而,要获得如此的优势就必然要付出更多的计算代价。

你可能感兴趣的:(机器学习)