二、支持向量机
SVM
的通用参数:tol
:浮点数,指定终止迭代的阈值。fit_intercept
:一个布尔值,指定是否需要计算截距项。如果为False
,那么不会计算截距项。当 , 时, 可以设置
fit_intercept=False
。intercept_scaling
:一个浮点数,用于缩放截距项的正则化项的影响。当采用
fit_intercept
时,相当于人造一个特征出来,该特征恒为1
,其权重为 。在计算正则化项的时候,该人造特征也被考虑了。为了降低这个人造特征的影响,需要提供
intercept_scaling
。class_weight
:一个字典或者字符串'balanced'
,指定每个类别的权重。- 如果为字典:则字典给出了每个分类的权重。如
{class_label: weight}
。 - 如果为字符串
'balanced'
:则每个分类的权重与该分类在样本集中出现的频率成反比。 - 如果未指定,则每个分类的权重都为
1
。
- 如果为字典:则字典给出了每个分类的权重。如
2.1 LinearSVC
LinearSVC
是根据liblinear
实现的,它可以用于二类分类,也可以用于多类分类问题(此时是根据one-vs-rest
原则来分类)。线性支持向量机
LinearSVC
: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)
penalty
:字符串,指定'l1'
或者'l2'
,罚项的范数。默认为'l2'
(它是标准SVC采用的)。loss
:一个字符串,表示损失函数。可以为:'hinge'
:此时为合页损失函数(它是标准 SVM 的损失函数)。'squared_hinge'
:合页损失函数的平方。
dual
:一个布尔值。如果为True
,则解决对偶问题;如果是False
,则解决原始问题。当n_samples > n_features
时,倾向于采用False
。tol
:一个浮点数,指定终止迭代的阈值。C
:一个浮点数,罚项系数。multi_class
:一个字符串,指定多类分类问题的策略。'ovr'
:采用one-vs-rest
分类策略。'crammer_singer'
:多类联合分类,很少用。因为它计算量大,而且精度不会更佳。此时忽略loss,penalty,dual
项。
fit_intercept
:一个布尔值,指定是否需要计算截距项。intercept_scaling
:一个浮点数,用于缩放截距项的正则化项的影响。class_weight
: 一个字典或者字符串'balanced'
,指定每个类别的权重。verbose
:一个正数。用于开启/关闭迭代中间输出日志功能。random_state
: 指定随机数种子。max_iter
: 一个整数,指定最大迭代次数。
模型属性:
coef_
:权重向量。intercept_
:截距值。
模型方法:
fit(X, y)
:训练模型。predict(X)
:用模型进行预测,返回预测值。score(X,y[,sample_weight])
:返回模型的预测性能得分。
下面的示例给出了不同的
C
值对模型预测能力的影响。C
衡量了误分类点的重要性,C
越大则误分类点越重要。为了便于观察将
x
轴以对数表示。可以看到当C
较小时,误分类点重要性较低,此时误分类点较多,分类器性能较差。
2.2 SVC
SVC
是根据libsvm
实现的,其训练的时间复杂度是采样点数量的平方。它可以用于二类分类,也可以用于多类分类问题(此时默认是根据
one-vs-rest
原则来分类)。支持向量机
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)
C
:一个浮点数,罚项系数。kernel
:一个字符串,指定核函数。'linear'
:线性核: 。'poly'
:多项式核:。其中:- 由
degree
参数决定。 - 由
gamma
参数决定。 - 由
coef0
参数决定。
- 由
'rbf'
(默认值):高斯核函数: 。其中 由
gamma
参数决定。'sigmoid'
:。其中:- 由
gamma
参数决定。 r
由coef0
参数指定。
- 由
'precomputed'
:表示提供了kernel matrix
。或者提供一个可调用对象,该对象用于计算
kernel matrix
。
degree
:一个整数。指定当核函数是多项式核函数时,多项式的系数。对于其他核函数,该参数无效。gamma
:一个浮点数。当核函数是'rbf'
,'poly'
,'sigmoid'
时,核函数的系数。如果'auto'
,则表示系数为1/n_features
。coef0
:浮点数,用于指定核函数中的自由项。只有当核函数是'poly'
和'sigmoid'
是有效。probability
:布尔值。如果为True
则会进行概率估计。它必须在训练之前设置好,且概率估计会拖慢训练速度。shrinking
:布尔值。如果为True
,则使用启发式(shrinking heuristic
) 。tol
:浮点数,指定终止迭代的阈值。cache_size
:浮点值,指定了kernel cache
的大小,单位为 MB 。class_weight
:指定各类别的权重。decision_function_shape
:为字符串或者None
,指定决策函数的形状。'ovr'
:则使用one-vs-rest
准则。那么决策函数形状是(n_samples,n_classes)
。此时对每个分类定义了一个二类
SVM
,一共n_classes
个二类SVM
。'ovo'
:则使用one-vs-one
准测。那么决策函数形状是(n_samples, n_classes * (n_classes - 1) / 2)
此时对每一对分类直接定义了一个二类
SVM
,一共n_classes * (n_classes - 1) / 2)
个二类SVM
。None
:默认值。采用该值时,目前会使用'ovo'
,但是在scikit v0.18
之后切换成'ovr'
。
其它参数参考
LinearSVC
。
模型属性:
support_
:一个数组, 形状为[n_SV]
,给出了支持向量的下标。support_vectors_
: 一个数组, 形状为[n_SV, n_features]
,给出了支持向量。n_support_
: 一个数组, 形状为[n_class]
,给出了每一个分类的支持向量的个数。dual_coef_
: 一个数组,形状为[n_class-1, n_SV]
。给出了对偶问题中,每个支持向量的系数。coef_
: 一个数组,形状为[n_class-1, n_features]
。给出了原始问题中,每个特征的系数。- 它只有在
linear kernel
中有效。 - 它是个只读的属性。它是从
dual_coef_
和support_vectors_
计算而来。
- 它只有在
intercept_
: 一个数组,形状为[n_class * (n_class-1) / 2]
,给出了决策函数中的常数项。
模型方法:
fit(X, y[, sample_weight])
:训练模型。predict(X)
:用模型进行预测,返回预测值。score(X,y[,sample_weight])
:返回模型的预测性能得分。predict_log_proba(X)
:返回一个数组,数组的元素依次是X
预测为各个类别的概率的对数值。predict_proba(X)
:返回一个数组,数组的元素依次是X
预测为各个类别的概率值 。
2.3 NuSVC
NuSVC: Nu-Support Vector Classificatio
与SVC
相似,但是用一个参数来控制了支持向量的个数。它是基于libsvm
来实现的。NuSVC
支持向量机:sklearn.svm.NuSVC(nu=0.5, 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)
nu
: 一个浮点数,取值范围为(0,1]
, 默认为0.5。它控制训练误差与支持向量的比值,间接控制了支持向量的个数。- 其它参数参考
SVC
。
模型属性:参考
SVC
。模型方法:参考
SVC
。
2.4 LinearSVR
LinearSVR
是根据liblinear
实现的。线性支持向量回归
LinearSVR
:class sklearn.svm.LinearSVR(epsilon=0.0, tol=0.0001, C=1.0, loss='epsilon_insensitive',
fit_intercept=True, intercept_scaling=1.0, dual=True, verbose=0, random_state=None,
max_iter=1000)
epsilon
:一个浮点数,表示 值。loss
:字符串。表示损失函数。可以为:'epsilon_insensitive'
:此时损失函数为 (标准的SVR
)'squared_epsilon_insensitive'
:此时损失函数为
- 其它参数参考
LinearSVC
。
模型属性:参考
LinearSVC
。模型方法:参考
LinearSVC
。下面的示例给出了不同的 值对模型预测能力的影响。
为了方便观看将
x
轴转换成对数坐标。可以看到预测准确率随着 下降。下面的示例给出了不同的
C
值对模型预测能力的影响。为了方便观看将
x
轴转换成对数坐标。可以看到预测准确率随着 增大而上升。说明越看重误分类点,则预测的越准确。
2.5 SVR
SVR
是根据libsvm
实现的。支持向量回归
SVR
:class sklearn.svm.SVR(kernel='rbf', degree=3, gamma='auto', coef0=0.0, tol=0.001, C=1.0,
epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)
参数:参考
SVC
。模型属性:参考
SVC
。模型方法:参考
SVC
。
2.6 NuSVR
NuSVR
是根据libsvm
实现的。支持向量回归
NuSVR
:class sklearn.svm.NuSVR(nu=0.5, C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0,
shrinking=True, tol=0.001, cache_size=200, verbose=False, max_iter=-1)
C
:一个浮点数,罚项系数。- 其它参数参考
NuSVC
。
模型属性:参考
NuSVC
。模型方法:参考
NuSVC
。
2.7 OneClassSVM
OneClassSVM
是根据libsvm
实现的。支持向量描述
OneClassSVM
:class sklearn.svm.OneClassSVM(kernel='rbf', degree=3, gamma='auto', coef0=0.0, tol=0.001,
nu=0.5, shrinking=True, cache_size=200, verbose=False, max_iter=-1, random_state=None)
参数:参考
NuSVC
。模型属性:参考
NuSVC
。模型方法:
fit(X[, y, sample_weight])
:训练模型。predict(X)
:用模型进行预测,返回预测值。每个预测值要么是+1
要么是-1
。