导入:从sklearn.svm导入SVC
1. scikit-learn SVM算法库的使用概述
scikit-learn中的SVM算法库分为两类,一类是分类的算法库,包括SVC,NuSVC和LinearSVC。另一个是回归算法库,包括SVR,NuSVR和LinearSVR。相关类包装在sklearn.svm模块中。
对于SVC,NuSVC和LinearSVC这三个类别,SVC和NuSVC相似。区别仅在于损耗的度量,从名称可以看出LinearSVC是线性分类,也就是说,它不支持每种。从低维到高维的这种核函数仅支持线性核函数,并且不能用于线性不可分割的数据。
类似地,对于SVR,NuSVR和LinearSVR的三个回归类别,SVR和NuSVR相似,不同之处仅在于损耗的度量。 LinearSVR是线性回归,只能使用线性核函数。
使用这些类时,如果我们有经验知道可以线性拟合数据,则可以使用LinearSVC进行分类或使用LinearSVR进行回归,它们不需要我们缓慢调整参数来选择各种内核函数和相应的Parameters亚博直播 ,速度也很快。如果我们没有数据分发的经验,通常会使用SVC进行分类或使用SVR进行回归,这需要我们选择内核函数并调整内核函数的参数。
哪些特殊情况需要使用NuSVC分类和NuSVR回归?如果我们对训练集训练错误率或支持向量的百分比有要求,则可以选择NuSVC分类和NuSVR。他们有一个参数可以控制该百分比。
下面将详细描述这些类的详细用法。
2.回顾SVM分类算法和回归算法
让我们简要回顾一下SVM分类算法和回归算法,因为其中一些参数与算法库的参数相对应。如果您不先进行审核,则以下参数说明可能会有点难以理解。
3. SVM内核功能概述
在scikit-learn中,有4个内置的内核函数。当然,如果您认为线性内核函数不算作内核函数,那么只有三个。
4. SVM分类算法库参数摘要
在这里,我们对SVM分类算法库的重要参数进行详细说明,重点介绍参数调整的注意事项。
参数
LinearSVC
SVC
NuSVC
惩罚系数C
它是第2部分中SVM分类模型的原型形式和对偶形式的惩罚系数C。默认值为1,通常需要通过交叉验证选择合适的C。一般来说,如果存在更多的噪声点,则C需要更小。
NuSVC没有此参数。它使用另一个参数nu来控制训练集训练的错误率,等效于选择C使得训练集在训练后满足一定的错误率。
nu
LinearSVC和SVC没有此参数。 LinearSVC和SVC使用惩罚系数C来控制惩罚。
nu表示训练集训练错误率的上限,或支持向量的百分比下限,取值范围为(0,1],默认值为0. 5.到惩罚系数C并可以控制惩罚的强度。
内核函数内核
LinearSVC没有此参数,LinearSVC仅限制使用线性内核函数
内核函数有四个内置选项,如第三部分所述:'linear'表示线性内核函数,'poly'表示多项式内核函数,'rbf'表示高斯内核函数,以及'Sigmoid'表示S型核函数。如果选择了这些内核功能,则相应的内核功能参数将具有单独的参数,以便稍后进行调整。默认值为高斯内核'rbf'。
另一个选择是“预先计算”,即我们预先计算与所有训练集和测试集样本相对应的Gram矩阵,以便K(x,z)直接在相应的Gram矩阵值中找到相应的位置
当然,我们也可以自定义内核功能。由于我没有使用过自定义的内核函数,因此在这里不再赘述。
正则化参数惩罚
仅对线性拟合有意义,您可以选择“ l1”进行L1正则化,或者选择“ l2”进行L2正则化。默认值为L2正则化。如果需要生成稀疏系数,可以选择L1正则化,这与线性回归中的Lasso回归相似。
SVC和NuSVC没有此参数
是否使用对偶形式优化对偶
这是一个布尔变量,它控制是否使用对偶形式来优化算法。默认值为True亚博网页版 ,也就是说,上面第二部分中的双重形式的分类算法用于优化算法。如果我们的样本数量大于要素数量,则对偶形式将用于大量计算。建议将dual设置为False,即使用原始形式进行优化
SVC和NuSVC没有此参数
内核功能参数度
LinearSVC没有此参数,LinearSVC仅限制使用线性内核函数
内核函数参数gamma
LinearSVC没有此参数,LinearSVC仅限制使用线性内核函数
内核函数参数coef0
LinearSVC没有此参数,LinearSVC仅限制使用线性内核函数
样品重量class_weight
指定样本每个类别的权重五大联赛下注 ,主要是为了防止训练集中某些类别中的样本过多,从而导致训练决策过于偏重于这些类别。在这里,您可以自己指定每个样品的重量,也可以使用“平衡”。如果使用“平衡”,则算法将自行计算权重,并且与样本量较小的类别相对应的样本权重会更高。当然,如果您的样本类别分布没有明显的偏差,则可以忽略此参数并选择默认的“无”
分类决策Decision_function_shape
LinearSVC没有此参数,请改用multi_class参数。
您可以选择'ovo'或'ovo'。当前的0. 18版本默认为'ovo'。 0. 19个版本将为“ ovr”
OvR(一个月休息)的想法非常简单,无论您有多少个元类别,我们都可以将其视为二进制分类。具体方法是,对于第K类的分类决策,我们将第K类的所有样本作为正样本,除第K类的样本以外的所有样本作为负样本,然后对上述样本进行二值分类得到。第K类分类模型。通过类推得出其他类别的分类模型。
OvO(一对多)是每次都从所有T个样本中选择两种样本。您可以将它们记录为T1和T2,并将所有输出作为T1和T2样本。在一起,以T1作为正例,T2作为负例,并进行二进制分类以获得模型参数。我们总共需要T(T- 1) / 2个分类。
从以上描述可以看出,OvR比较简单,但是分类效果相对较差(这里指的是大多数样本分布,在某些样本分布下OvR可能更好)。 OvO分类相对准确,但分类速度不如OvR快。通常建议使用OvO以获得更好的分类结果。
多分类决策
您可以选择“ ovr”或“ crammer_singer”
“ ovr”类似于SVC和nuSVC中与Decision_function_shape相对应的“ ovr”。
'crammer_singer'是'ovr'的改进版本。据说这是一种改进,但并不比'ovr'好。通常,不建议在应用程序中使用它。
SVC和nuSVC没有此参数,请改用Decision_function_shape参数。
缓存大小cache_size
LinearSVC不需要太多计算,因此不需要此参数
对于大样本,高速缓存大小会影响训练速度,因此,如果机器内存较大,建议使用500MB甚至1000MB。默认值为200,即200MB。
5. SVM回归算法库参数摘要
SVM回归算法库的重要参数的很大一部分与分类算法库相似,因此在这里我们将重点介绍分类算法库中的不同部分。对于同一部分,请参考上一节中的相应参数。
参数
LinearSVR
SVR
nuSVR
惩罚系数C
它是第2部分中SVM分类模型的原型形式和对偶形式的惩罚系数C。默认值为1,通常需要通过交叉验证选择合适的C。一般而言,如果存在更多的噪声点,则C需要更小。您可能已经注意到,在分类模型中,nuSVC使用nu的等效参数来控制错误率,但是未使用C。为什么nuSVR仍然具有此参数?是不是重复了?这里的原因是在回归模型中。除了惩罚系数C,我们还有距离误差ϵ来控制损耗度量,因此只有一个nu不能等于C。也就是说,回归误差率是惩罚系数C和距离误差ϵ 。效果的结果。稍后我们会看到nu在nuSVR中的作用。
nu
LinearSVR和SVR没有此参数,请使用ϵ来控制错误率
nu表示训练集训练的错误率的上限,或支持向量的百分比的下限,取值范围为(0,1],默认值为0. 5.通过选择不同的错误率来获得不同的距离支持向量机 参数,即距离误差ϵ,也就是说,此处nu的使用等效于LinearSVR和SVR的ϵ参数。
距离误差ε
nuSVR没有此参数,请使用nu控制错误率
是否使用对偶形式优化对偶
类似于SVC,请参考上一节中的双重说明
SVR和NuSVR没有此参数
正则化参数惩罚
类似于SVC,请参阅上一节中的罚款说明
SVR和NuSVR没有此参数
内核函数内核
LinearSVR没有此参数,LinearSVR仅限制使用线性内核函数
类似于SVC和nuSVC,请参考上一节中的内核描述
内核函数参数度,γ和coef0
LinearSVR没有这些参数,LinearSVR仅限制使用线性内核函数
类似于SVC和nuSVC,请参考上一节中的内核参数说明
损失函数测量损失
您可以选择“ epsilon_insensitive”和“ squared_epsilon_insensitive”支持向量机 参数,如果您选择“ epsilon_insensitive”,则损耗指标将满足
与第2节相同的损耗度量。这是SVM回归的默认损耗度量形式。
如果选择的是“ squared_epsilon_insensitive”,则损失指标可以满足
可以看出松弛系数少一个。 SVM原理系列中没有讨论优化过程,但是目标函数优化过程完全相似。
通常,默认的“ epsilon_insensitive”就足够了。
SVR和NuSVR没有此参数
缓存大小cache_size
LinearSVC不需要太多计算,因此不需要此参数
在大样本的情况下,缓存大小将影响训练速度,因此,如果机器具有较大的内存(例如SVC和nuSVC),建议使用500MB甚至1000MB。默认值为200,即200MB。
6. SVM算法库的其他调整点
上面已经总结了scikit-learn中类库的参数。这是其他调整点的摘要。
1)通常建议在训练之前对数据进行标准化。当然,测试集中的数据也需要进行标准化。
2)在特征数量非常多的情况下,或者当样本数量远小于特征数量时,使用线性核,效果已经非常好,并且只有惩罚系数需要选择C。
3)选择核函数时,如果线性拟合不好,通常建议使用默认的高斯核'rbf'。此时,我们主要需要艰苦地调整惩罚系数C和核函数参数γ,并通过多轮交叉验证选择合适的惩罚系数C和核函数参数γ。
4)从理论上讲,高斯核并不比线性核更差,但是该理论基于需要花费更多时间来调整参数。所以实际上,我们可以使用线性核来解决问题,我们尝试使用线性核。
7.以svm中的支持向量分类SVC为例
以svm中的支持向量分类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 =无,
verbose = False,
max_iter = -1,
decision_function_shape ='ovr',
random_state =无)
每个参数的具体用法介绍如下:
C:浮点型,可选(默认= 1. 0)
误差项的惩罚参数通常取10到n次方的值,例如10到5次方的值,以及10到4次方的值。 。 。 。 10到0、10、1000、1000的幂,可以在python中使用pow(10,n)n = -5〜inf
C越大,等同于惩罚松弛变量。希望松弛变量接近于0,即,错误分类的惩罚增加了,并且倾向于将其完全划分为训练集。在训练集测试期间,这将导致较高的准确率。 ,但是泛化能力很弱。
C值小,减少了误分类的惩罚,提高了容错能力,泛化能力强。
内核:字符串,可选(默认=“ rbf”)
在svc中指定的内核类型。
可以是:“线性”,“多边形”,“ rbf”,“ S型”,“预先计算”或自己指定。默认情况下,使用“ rbf”。
degree:整数,可选(默认值= 3)
将内核指定为“多项式”时,它表示所选多项式的最高阶,默认值为第三阶多项式。
如果指定的内核不是“ poly”,它将被忽略,也就是说,此参数仅对“ poly”有效。
伽玛:浮点型,可选(默认=“自动”)
当内核为“ rbf”,“ poly”或“ Sigmoid”时的内核系数。
如果未设置,则默认为“自动”。此时,内核系数设置为:1 / n_features
coef0:浮点型,可选(默认= 0. 0)
内核函数的常数项。
仅在内核为“ poly”或“ sigmoid”时有效,默认值为0。
概率:布尔值,可选(默认为False)
是否使用概率估计。
必须在fit()方法之前使用它。使用此方法会降低计算速度。默认值为False。
缩小:布尔值,可选(默认为True)
如果您可以预测哪些变量对应于支持向量,则足以训练这些样本,而其他样本可以忽略。这不会影响培训结果,但会减少问题的规模并有助于快速解决问题。此外,如果可以预测哪些变量在边界上(即a = C),则这些变量可以保持不变YABO平台 ,并且仅可以优化其他变量,因此问题的规模更小,训练时间也更长减少。这是收缩技术。
收缩技术基于以下事实:支持向量仅占训练样本的一小部分,并且大多数支持向量的拉格朗日乘数等于C。
tol:浮动,可选(默认= 1e- 3)
当误差项达到指定值时,训练将停止。默认值为1e-3,即0. 001。
cache_size:浮动,可选
指定内核缓存的大小,默认值为200M。
class_weight:{dict,“ balanced”},可选
重量设置。如果未设置,则默认情况下所有类别的权重值都相同。
作为字典传递。
详细:bool,默认:False
是否启用详细输出。
它在多线程时可能无法按预期工作。默认值为False。
max_iter:整数,可选(默认=-1)
最大迭代次数是强制性的。
默认设置为-1,这表示无限次迭代的次数。
求解器中的迭代的硬限制,或无限制的-1。
decision_function_shape:“ ovo”,“ ovr”,默认=“ ovr”
##这种用法不是很了解。##
是否返回形状为(n_samples,n_classes)的一比对(ovr)决策函数作为所有其他分类器,还是返回libsvm的原始一比对一('ovo')决策函数?形状(n_samples,n_classes *(n_classes- 1) / 2)。
在0. 19版中进行了更改:默认情况下,decision_function_shape为“ ovr”。
0. 17版的新功能:建议Decision_function_shape =“ ovr”。
在0. 17版中进行了更改:不建议使用Decision_function_shape ='ovo',并且不使用。
random_state:int,RandomState实例或无,可选(默认为无)
伪随机数使用情况数据。
一些属性的介绍:
support_:类似数组,形状= [n_SV]
支持向量的指标。
support_vectors_:类似数组,形状= [n_SV,n_features]
支持向量。
n_support_:数组状,dtype = int32,形状= [n_class]
每个类的支持向量数量。
dual_coef_:数组,形状= [n_class-1,n_SV]
决策函数中支持向量的系数。对于多类,所有1-vs-1分类器的系数。在多类情况下,系数的布局有些微不足道。有关详细信息,请参见《用户指南》的“ SVM”部分中有关多类分类的部分。
coef_:数组,形状= [n_class-1,n_features]
分配给要素的权重(原始问题的系数)。仅在线性核的情况下可用。
coef_是从dual_coef_和support_vectors_派生的只读属性。
intercept_:数组,形状= [n_class *(n_class- 1) / 2]
决策函数中的常量。
参考:
([1)
([2)
老王
最新评论