02-35 scikit-learn库之支持向量机

scikit-learn库之支持向量机

在这里插入图片描述
  在scikit-learn库中针对数据是否线性可分,主要将支持向量机分为以下三种分类模型LinearSVCSVCNuSVC;还有三种回归模型LinearSVRSVRNuSVR

  接下来将会讨论上述六者的区别,由于SVC应用场景较为广泛,主要细讲SVC,其他的只讲与SVC的区别。由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm

SVC

使用场景

  SVC模型基于较为灵活,既可以支持线性可分数据,又可以支持线性不可分数据的分类。

代码

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

参数详解

  • **C:**惩罚系数,float类型。如果C越大,惩罚程度越大,模型泛化能力降低;如果C越小,则容许训练样本中有一些误分类错误样本,泛化能力强,一般噪声较多推荐C小点。默认为1。
  • **kernel:**核函数,str类型。默认为’rbf’,可选核函数有
    • ‘linear’:线性核函数
    • ‘poly’:多项式核函数
    • ‘rbf’:径向核函数(高斯核)
    • ‘sigmoid’:Sigmoid核函数
    • ‘precomputed’:核矩阵,即自己不使用核函数的情况下已经计算了核函数矩阵
  • **degree:**核函数参数,int类型。只有当kernel='poly’时才有用,即表示多项式核函数的阶数,对应核函数中的 d d d。默认为3。
  • **gamma:**核函数参数,float类型。只有当kernel={‘rbr’,‘poly’,‘sigmoid’}时才有用,对应核函数中的 γ \gamma γ。默认为’auto’,即表示其值为样本特征数的倒数。
  • **coef0:**核函数参数,float类型。只有当kernel={‘poly’,‘sigmoid’}时才有用,对应核函数中的 r r 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。

属性

  • **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,则返回空数组。不支持多分类问题的输出打印。

方法

  • **decision_functino(X):**求出样本X的决策函数。
  • **fit(X,y):**把数据放入模型中训练模型。
  • **get_params([deep]):**返回模型的参数,可以用于Pipeline中。
  • **predict(X):**预测样本X的分类类别。
  • **score(X,y[,sample_weight]):**基于报告决定系数 R 2 R^2 R2评估模型。
  • **set_prams(**params):**创建模型参数。

LinearSVC

在这里插入图片描述

  LinearSVC模型即普通的线性可分支持向量机,即对线性不可分的数据不能使用。因为该模型不需要调参,并且速度快,所以如果非常明确数据一定是线性可分的情况下可以使用该模型,否则模型准确度反倒会变得很低,。

NuSVC

  NuSVC模型基于SVC模型,它增加了nu参数可以控制模型的错误率。

LinearSVR

  LinearSVR限制了只能使用线性核函数,相比较于LinearSVM不同之处在于损失函数的度量,其中它的损失函数参数loss='epsilon_insensitive’时,为类似于线性支持向量机的有松弛因子的损失度量,损失度量满足
− ϵ − ξ i ≥ y i − ω ϕ ( x i ) − b ≤ ϵ + ξ i -\epsilon-\xi_i\geq{y_i}-\omega\phi(x_i)-b\leq\epsilon+\xi_i ϵξiyiωϕ(xi)bϵ+ξi
而loss=‘squared_epsilon_insensitive’,为少了松弛因子的损失度量方式,即损失度量满足
( y i − ω ϕ ( x i ) − b ) 2 ≤ ϵ + ξ i ({y_i}-\omega\phi(x_i)-b)^2\leq\epsilon+\xi_i (yiωϕ(xi)b)2ϵ+ξi
一般情况下使用’epsilon_insensitive’足够了。

SVR

  SVR模型相较于LinearSVR模型可以使用核函数,既可以对线性不可分数据做回归。

NuSVR

  NuSVR模型相较于SVR模型,增加了nu参数可以控制模型的错误率。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值