更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
scikit-learn库之支持向量机
在scikit-learn库中针对数据是否线性可分,主要将支持向量机分为如下三种分类模型LinearSVC
、SVC
和NuSVC
;还有三种回归模型LinearSVR
、SVR
和NuSVR
。算法
接下来将会讨论上述六者的区别,因为SVC
应用场景较为普遍,主要细讲SVC
,其余的只讲与SVC
的区别。因为是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也能够去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm数组
1、SVC
1.1 使用场景
SVC
模型基于较为灵活,既能够支持线性可分数据,又能够支持线性不可分数据的分类。缓存
1.2 代码
import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = SVC(gamma='auto')
clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
print(clf.predict([[-0.8, -1]]))
[1]
print(clf.fit_status_)
0
1.3 参数详解
- C:惩罚系数,float类型。若是C越大,惩罚程度越大,模型泛化能力下降;若是C越小,则允许训练样本中有一些误分类错误样本,泛化能力强,通常噪声较多推荐C小点。默认为1。
- kernel:核函数,str类型。默认为'rbf',可选核函数有
- 'linear':线性核函数
- 'poly':多项式核函数
- 'rbf':径向核函数(高斯核)
- 'sigmoid':Sigmoid核函数
- 'precomputed':核矩阵,即本身不使用核函数的状况下已经计算了核函数矩阵
- degree:核函数参数,int类型。只有当kernel='poly'时才有用,即表示多项式核函数的阶数,对应核函数中的\(d\)。默认为3。
- gamma:核函数参数,float类型。只有当kernel={'rbr','poly','sigmoid'}时才有用,对应核函数中的\(\gamma\)。默认为'auto',即表示其值为样本特征数的倒数。
- coef0:核函数参数,float类型。只有当kernel={'poly','sigmoid'}时才有用,对应核函数中的\(r\)。默认为0。
- shrinking:启发式收缩,bool类型。是否采用启发式收缩方式。默认为True。
- probability:几率估计,bool类型。是否启用几率估计,必须得在fit()以前设置为True,会使得fit()速度变慢。默认为False。
- tol:偏差精度,float类型。支持向量机中止训练的偏差精度。默认为1e-3。
- cache_size:缓存大小,float类型。指定训练所须要的内存大小。默认为200,单位为MB。
- class_weight:样本类别权重,{dict类型,'balanced'}。给每一个类别指定不一样的权重,'balanced'将自动分配不一样类别样本的权重。可选参数。
- verbose:日志冗长度,int类型。verbose=0,不输出训练过程;verbose=1,输出部分训练过程;verbose>1,输出全部的训练过程。默认为0。
- max_iter:迭代次数,int类型。算法迭代次数,算法迭代到必定次数会收敛。默认为-1,表示不限制。
- decision_function_shape:决策函数,str类型。决可选参数'ovo'和'ovr','ovo'表示一对一,'ovr'表示一对多。默认为'ovr'。
- random_state:随机数种子,int类型。使用后能够保证随机数不会随着时间的变化而变化。默认为None。
1.4 属性
- support_:array-like类型。全部支持向量的索引。
- support_vectors_:array-like类型。全部的支持向量。
- n_support_:array-like类型。每一个类有多少个支持向量。
- dual_coef_:array类型。决策函数中支持向量的系数。
- coef_:array类型。原始问题中特征的系数,只可用于线性核中。
- intercept_:array类型。决策函数的截距。
- fit_status_:int类型。若是训练模型成功返回0,失败返回1并报警。
- probA_:array类型。
- probB_:array类型。若是probability=True,则能够估计A和B类各自在决策函数中的几率大小;若是probability=False,则返回空数组。不支持多分类问题的输出打印。
1.5 方法
- decision_functino(X):求出样本X的决策函数。
- fit(X,y):把数据放入模型中训练模型。
- get_params([deep]):返回模型的参数,能够用于Pipeline中。
- predict(X):预测样本X的分类类别。
- score(X,y[,sample_weight]):基于报告决定系数\(R^2\)评估模型。
- set_prams(**params):建立模型参数。
2、LinearSVC
LinearSVC
模型即普通的线性可分支持向量机,即对线性不可分的数据不能使用。由于该模型不须要调参,而且速度快,因此若是很是明确数据必定是线性可分的状况下可使用该模型,不然模型准确度反倒会变得很低,。数据结构
3、NuSVC
NuSVC
模型基于SVC
模型,它增长了nu参数能够控制模型的错误率。dom
4、LinearSVR
LinearSVR
限制了只能使用线性核函数,相比较于LinearSVM
不一样之处在于损失函数的度量,其中它的损失函数参数loss='epsilon_insensitive'时,为相似于线性支持向量机的有松弛因子的损失度量,损失度量知足
\[ -\epsilon-\xi_i\geq{y_i}-\omega\phi(x_i)-b\leq\epsilon+\xi_i \]
而loss='squared_epsilon_insensitive',为少了松弛因子的损失度量方式,即损失度量知足
\[ ({y_i}-\omega\phi(x_i)-b)^2\leq\epsilon+\xi_i \]
通常状况下使用'epsilon_insensitive'足够了。机器学习
5、SVR
SVR
模型相较于LinearSVR
模型可使用核函数,既能够对线性不可分数据作回归。函数
6、NuSVR
NuSVR
模型相较于SVR
模型,增长了nu参数能够控制模型的错误率。学习