机器学习-支持向量机SVM(上)
支持向量机, 它源于统计学习理论, 是除了集成算法之外, 接触的第一个强学习器
功能 | |
有监督学习 |
线性二分类与多分类(Linear Support Vector Classification) 非线性二分类与多分类(Support Vector Classification, SVC) 普通连续型变量的回归(Support Vector Regression) 概率型连续变量的回归(Bayesian SVM) |
无监督学习 |
支持向量聚类(Support Vector Clustering SVC) 异常值检测(One-class SVM) |
半监督学习 | 转导支持向量机(Transductive Support Vector Machines, TSVM) |
应用: SVM在各种实际问题中都表现非常优秀, 她在手写识别数字, 和人脸识别中应用广泛, 在文本和超文本分类中举足轻重, 因为SVM可以大量减少标准归纳和转换设置中对标记训练实例的需求, 同时, SVM也被用来执行图像的分类, 并用于图像分割系统, 除此之外, SVM现在已经广泛被用于蛋白质分类, 在生物科学的尖端研究中, 人们还使用支持向量机来识别用于模型预测的各种特征, 从学术的角度来看, SVM是最接近深度学习的机器学习算法
支持向量机分类器的工作原理:
- 支持向量机的分类方法, 是在这组分布中找出一个超平面, 作为决策边界, 使模型在数据上的分类误差尽量小, 尤其是在未知数据集上的分类误差(泛化误差)尽量小
超平面: 在几何中, 超平面是一个空间的子空间, 它是维度比所在的空间小一维的空间, 入股偶数据空间本身是三维的, 则其超平面是二维的, 则其超平面是一维直线, 在二分类问题中, 如果一个超平面能够将数据划分为两个集合, 其中每个集合中包含单独的一个类别, 我们就收这个超平面是数据的决策边界
我们有B1和B2来两条可能的决策边界, 我们可以把决策B1向两边平移, 直到碰到离这条决策边界最近的方块和圆圈后停下, 形成两个新的超平面, 分别是b11和b12, 并且我们将原始的决策边界移动到b11和b12的中间, 确保B1到b11和b12的距离相等, 在b11和b12中间的距离, 叫做B1这条决策边界的边际(margin),通常记作d, 为了简便, 我们称b11和b12为"虚线超平面",
当数据量变大的时候(引入测试集), 我们发现,,拥有更大的边际决策边界在分类中的泛化误差更小, 这一点可以由结构风险最小化定律来证明, 如果边际很小, 则任何轻微扰动都会对决策边界的分类产生很大的影响, 边界很小的情况, 是一种模型在训练集上变现的很好, 却在测试集上表现糟糕的情况, 所以会"过拟合". 所以我们在找寻决策边界的时候, 希望边际越大越好
支持向量机, 就是通过找出边际最大的决策边界, 来对数据进行分类的分类器, 因此, 支持向量分类器又叫做最大边际分类器
支持向量机的三层理解
- 目标是"找出边际的最大决策边界", 听起来是一个十分熟悉的表达, 这是一个最优化问题, 而最优化问题往往和损失函数联系在一起, 和逻辑回归中的过程一样, SVM也是通过最小化损失函数来求解一个用于后续模型使用的重要信息;决策边界
- 第一层: 定义决策边界的数学表达式, 并基于此表达式定义分类函数, 为寻找最大边际, 引出损失函数 1/2 * || ω ||2 (对于非线性数据, 使用非线性转化来升高原始数据的维度, 使用核函数在低维度空间中进行计算, 以求解出高维度空间中的线性超平面, 添加松弛系数,作为惩罚项, 以允许部分样本点在边界之内存在)
- 第二层: 为求解能够使边际最大化的W和b,引入拉格朗日因子α, 引入拉格朗日对偶函数, 使求解w和b的过程转化为对α的求解, 使用SMO或梯度下降等方法求解α,在根据α解出w和b,最终找出决策边界
- 第三层: 能够使用数学完全证明以上两个过程
线性SVM的损失函数
- 对于二分类标签, 假设每个样本的特征数为2, 则有i = (x1i, x2i, yi)T 分别由我们的特征向量和标签组成, 在平面上以, x2为横坐标, x1为纵坐标, , 所以我们可以定义出决策边界的函数
- x1 = ax2 + b
- 变换得:
- 其中, [a,-1]就是我们的参数向量ω, x就是我们的特征向量, b是我们的截距, 注意, 这个表达式长的非常像我们的线性回归公式, 只不过线性回归中等号一边是标签, 回归后会拟合出一个标签, 而决策边界的表达式中却没有标签的存在, 全部由参数, 特征和截距组成的一个式子, 等号的一边是0
- 在一组数据下, 给定固定的ω和b, 这个式子就可以是一条固定的直线, 在ω和b不确定的状况下, 这个表达式ωTx + b = 0 就可以代表任意一条直线, 如果在ω和b固定时, 给定一个唯一的x取值, 这个表达式就可以表示固定的一个点, 在SVM中, 我们就使用这个表达式来表示我们的决策边界, 我们的目标时求解能够让决策边际最大化的决策边界, 所以我们要求解参数向量ω和截距b
- 一个列向量的转置乘以另一个列向量, 可以获得两个向量的点击(dot product), 表示为(ω·(xa -xb)), 两个向量的点积为0, 则说明两个向量的方向时相互垂直的, 又因为xa, xb时一条线上的两个点, 相减后的向量时由xb指向xa, 所以xa - xb的方向是平行于它们所在直线(决策边界), 而ω与xa - xb相互垂直, 所以参数向量ω的方向必然垂直于我们的决策边界 此时, 我们有了我们的决策边界, 任意一个紫色的点xp就可以表示为(由于紫色的点所代表的标签是1, 我们规定,p>0)
- ω • xp + b = p
- ω • xr + b = r
- 核心误区:
- 注意, 在这里, p和r的符号是我们认为规定的, 如果k和k'是由原来的决策边界平移得到的话, 紫色的点在决策边界上方, ω•x + b = 0应该要向上平移, 直线向上平移的话是增加截距, 应该写成ω•x + b + 正数 = 0
- 为了推导和计算方便, 我们规定:
- 标签是{-1.1},
- 决策边界以上的点, 标签都为正, 并且调整ω和b的符号, 让这个点在ω•x+b上得出结果为正
- 决策边界以下的点, 标签都为负, 并且通过调整ω和b的符号, 让这个点在ω•x+b上得出的结果为负
- 结论: 决策边界以上的点都为正, 以下的点都为负, 是我们为了计算简便, 而认为规定的, 这种规定不会影响对参数ω和截距b的求解
- 决策边界的两边要有两个超平面, 这两个超平面在二维空间中就是两条平行线(我们的虚线超平面), 而它们之间的距离就是我们的边际d, 而句测边界位于这两条线的中间, 所以这两条线必然是对称的,
- ω•x+b = k,ω•x + b = -k 两边同时除以k得:
- ω•x + b = 1, ω•x + b = -1 ...........................①
- 这就是我们平行于决策边界的两条线的表达式, 表达式两边的1和-1分别表示了两条平行于决策边界的虚线到决策边界的相对距离, 此时, 我们可以让这两条线分别过两类数据中距离我们决策边界最近的点, 这些点就被称为"支持向量", 而决策边界永远在这两条线的中间.
- 线性代数中模唱的运用
- 向量b除以自身的模长|| b ||可以得到b方向上的单位向量
- 向量a乘以向量b方向上的单位向量, 可以得到向量a在向量b上的投影长度
- 所以, 我们将①式中的两式做减法得:
- ω • (xp -xr) = 2, 将此式除以|| ω ||得:
- 自此,我们得到了最大边际关于|| ω ||的表达式, 因此要想求d的最大值, 就求得|| ω ||的最小值, 同时我们可以转为下式, 求ω的最小值
- 之所以要在模长上加平方,是因为模长的本质是一个距离, 所以它是一个带根号的存在, 我们对它取平方, 式为了消除根号
- 我们的两条虚线表示超平面, 式数据边缘所在的点, 所以对于人一样本i, 我们可以吧决策函数写作
- ω•xi + b ≥1 if yi = 1
- ω•xi + b ≤-1 if yi = -1
- 整理两个式子可得:
- 这个式子我们称为函数间隔, 将函数间隔作为条件附加到我们f(ω)上, 我们就得到了SVM的算是函数的最初形态:
- 函数间隔与几何间隔
- 函数间隔: 对于给定的数据集T和超平面(ω,b), 定义超平面(ω, b)关于样本点(xi, yi)的函数间隔为
- γi = yi(ω•xi + b), 这其实式我们虚线超平面的表达式整理过后的式子, 函数间隔可以表示分类预测的正确性以及确信度
- 在函数间隔的基础上除以ω的模长|| ω ||来得到几何间隔:
- 几何间隔的本质其实是点xi到超平面(ω, b), 即到我们决策边界(带符号)的距离
- 函数间隔: 对于给定的数据集T和超平面(ω,b), 定义超平面(ω, b)关于样本点(xi, yi)的函数间隔为
- 重要数学公式补充: 已知直线的表达式, 求, 平面上任一点到直线的距离公式
线性SVM的拉格朗日对偶韩素好和决策函数
- 我们的损失函数式二次的, 并且我们的损失函数中的约束条件在参数ω和b下式线性的, 求解这样的损失函数被称为"凸优化问题", 拉格朗日乘数法正好可以用来解决凸优化问题, 所以, 使用拉格朗日乘数将损失函数改写形式如下:
- 其中, αi就叫做拉格朗日乘数,参数向量ω,b, xi式特征矩阵, yi是标签
- 拉格朗日也分为两部分, 第一部分和我们原始的损失函数一样, 第二部分呈现了我们带有不等式的约束条件, 我们希望L(ω,b,α)不仅能够代表我们原有的损失函数f(ω)和约束条件, 还能够表示我们想要最小化损失函数来求解ω和b的意图, 所以我们要先以α为参数 求解L(ω,b,α)的最大值, 再以ω, b为参数, 求解L(ω,b,α)的最小值, 因此,我们可以写作
- 拉格朗日函数→拉格朗日对偶函数
- 对于任何一个拉格朗日函数L(x,α) = f(x) + Σi=1qαihi(x) 都存在一个与它对应的对偶函数g(α), 只带由拉格朗日乘数α作为唯一的参数, 如果L(x,α)的最优解存在并可以表示为minL(x,α), 并且对偶函数的最优解也存在并可以表示为maxg(α), 则我么可以定义对偶差异, 即拉格朗日对偶函数的最优解之间的差值
- 如果Δ=0, 则称L(x,α)与其对偶函数之间存在强对偶关系, 此时我们就可以通过求解其对偶函数的最优解来替代原始函数的最优解
- 函数Ld就是我恩的对偶函数, 对所有存在对偶函数的拉格朗日函数我们由对偶差异如下:
- Δ = minL(x,α) - maxg(x)
- 则对于我们的L(ω, b,α)和Ld,我们则有:
- Δ = minmaxL(ω, b, α) - maxLd
- 我们对L(ω, b, α)求偏导数让偏导数等于0, 所以我们求解对偶函数的过程其实就是在求解L(ω, b,α)的最小值, 所以我们又可以把公式写成:
- 对偶函数与原始函数转化过程, 我们只需要求解对偶函数的最大值, 就可以求出α, 最终, 目标函数转化为:
- 一旦我们求得了α值, 我们就可以使用求导后得到的(1)式求解ω, 并可以使用(1)式和决策边界的表达式结合, 得到下面式子
- 当求得特征向量ω和b, 我们就得到了我们决策边界的表达式, 也就可以利用决策边界和其他有关的超平面进行分类了, 我们的决策函数就可以被写作:
- 对于任何一个拉格朗日函数L(x,α) = f(x) + Σi=1qαihi(x) 都存在一个与它对应的对偶函数g(α), 只带由拉格朗日乘数α作为唯一的参数, 如果L(x,α)的最优解存在并可以表示为minL(x,α), 并且对偶函数的最优解也存在并可以表示为maxg(α), 则我么可以定义对偶差异, 即拉格朗日对偶函数的最优解之间的差值
-
- 其中xtexst式任意测试样本, sign(h)式h>0时返回1, h<0时返回-1, 的符号函数, 至此, SVM四种相关函数: 损失函数的初始形态, 拉格朗日函数, 拉格朗日对偶函数以及最后的决策函数.
画决策边界:contour函数
- Contour是我们专门用来绘制等高线的函数, 等高线本质上是在二维图像上表现三维图像的一种形式, 其中二维x和y式两条坐标轴上的取值, 而Z表示高度, Contour就是x和y构成平面上的所有点中, 高度一致的点连接乘线段的函数, 在同一等高线上的点一定具有相同的Z值, 我们可以利用这个性质来绘制我们的决策边界
参数 | 含义 |
x,y |
选填, 两维平面上得横纵坐标取值, 一般要求是二维结构并且形状需要与Z相同, 往往通过numpy.merhgrid()这样得函数来创建. 如果x和y都是一维, 则Z得结构必须为len(Y), len(X). 如果不填写, 则默认X = range(Z.shape[1]), Y=range(Z.shape[0]) |
Z | 必填, 平面上所有得点对应得高度 |
levels |
可不填, 不填默认显示所有等高线, 填写用于确定等高线得数量和位置, 如果填写整数n, 则显示n个数据区间, 即绘制n+1条等高线, 水平高度自动选择, 如果填写数组或列表, 则在指定 得高度级别绘制等高线, 列表或数组中得值必须按递增顺序排列 |
- 其实在我们得决策边界上ω•x + b = 0,并在决策边界得两边找出两个超平面, 使得超平面到决策边界得相对距离为1, 那其实,我们只需要在我们的样本构成得平面上, 把所有得到决策边界得距离为0得点相连, 就是我们得决策边界, 而把所有得决策边界相对为1(上边公式中)相连, 就是我们两个平行于决策边界得超平面了, 此时, 我们得Z就是平面上任意点到达超平面得距离
非线性SVM与核函数
- 为了能够找出非线性数据的线性决策边界, 我们需要讲数据从原始的空间x投射到新空间Φ(x)中, Φ是一个映射函数, 它代表了某种非线性的变换, 如同我们之前所做的使用r来升维一样, 这种非线性变换看起来是一种非常有效的方式, 使用这种变换, 线性SVM的原理可以被很容易推广到非线性情况下, 其推导过程和逻辑都与线性SVM一样, 只不过在定义决策边界之前, 我们必须对数据进行升维度,如此, 非线性SVM的损失函数的初始形态为:
- 同理, 非线性SVM的拉格朗日函数和拉格朗日对偶函数也可得:
- 使用同样的推导方式, 让拉格朗日满足KKT条件, 并在拉格朗日函数上, 对每个参数求导, 经过和线性SVM相同的变换后, 就可以得到拉格朗日对偶函数, 同样使用梯度下降或SMo等的方式对α进行求解, 最后可以求得决策边界, 并得到最终的决策函数
重要参数kernel
- 这种变换非常巧妙, 但也带有一些现实问题, 首先, 我们可能不清楚应该什么样的数据应该使用设么类型的映射函数来确保可以在变换空间中找出线性决策边界, 极端情况下, 数据可能会被映射到无限维度的空间中, 这种高维空间科恩那个不是很好, 维度越高, 推导和计算的难度都会随之暴增, 齐次, 已知适当的映射函数, 我们想哟计算类似于Φ(xi)•Φ(test)这样的点积, 计算量可能回无比巨大, 要找出超平面所独处的代价是非常昂贵的.
核函数:
- 解决高维计算量大问题的数学方式, 叫做"核技巧", 是一种能够使用数据原始空间中的向量计算来表示升维后空间中的点积结果的数学方式, 具体表现为: K(μ, ν) = Φ(μ)•Φ(ν), 而这个原始空间中的点积函数K(μ, ν), 就被叫做"核函数"
- 选用不同的核函数, 就可以解决不同数据分布下的寻找超平面问题, SVC中,这个功能由参数"kernel"和一系列与核函数相关的参数来进行控制,, kernel选项如下:
输入 | 含义 | 解决问题 | 核函数的表达式 |
参数 gamma |
参数 degree |
参数 codf0 |
linear | 线性核 | 线性 | K(x,y)=xTy=x•y | NO | No | No |
poly | 多项式核 | 偏线性 | K(x,y)=(γ(x•y)+r) | Yes | Yes | Yes |
sigmoid | 双曲正切核 | 非线性 | K(x,y)=tanh(γ(x•y)+r) | Yes | No | Yes |
rbf | 高斯径向基 | 偏非线性 | K(x,y)=e-γ||x-y||2, γ>0 | Yes | No | No |
- 可以看出, 除了"linear"之外, 其他核函数都可以处理非线性问题, 多项式核函数有次数d, 当d为1的时候, 他就是再处理线性问题, 当d为更高次项的时候它就是在处理非线性问题, 我们之前画图时使用的选项"linear", 自然不能处理环形数据这样非线性的状况, 之前我们使用的计算r的方法, 其实是高斯径向基核函数所对一个的功能, 在参数"kernel"中输入"rbf"就可以使用这种核函数
- 线性核,尤其是多项式核函数在高次项时计算非常慢
- rbf和多项式核函数都不擅长处理量纲不统一的数据集
参数 | 含义 |
degree |
整数, 可不填, 默认3 多项式核函数的次数("poly"), 如果核函数没有选择"poly", 这个参数会被忽略 |
gamma |
浮点数, 可不填, 默认是"auto" 核函数的系数, 仅在参数kernel的选项为rbf, poly和sigmoid的时候有效, 输入"auto", 自动使用1/(n_features)作为gamma的取值 输入"scale", 则使用1/(逆_features*x.std())作为gamma的取值 输入"auto_deprecated",则表示没有传递明确的gamma值(不推荐使用) |
codf0 |
浮点数, 可不填, 默认是=0.0 核函数中的常数项, 它只在参数kernel为"poly"和"sigmoid"的时候, 有效 |
硬间隔与软间隔: 重要参数c
- 当两组数据完全线性可分, 我们可以找出一个决策边界使得训练上的分类误差为0, 这两种数据就被称为是存在"硬间隔".当两组数据几乎是完全线性可分的, 但决策边界在训练集上存在较小的训练误差没这两种数据就被称为"软间隔"
- 当我们原始条件不能满足分类要求, 来让决策边界适用于我们的异常点, 于是我们引入松弛系数ζ来帮助我们优化原始的判别函数:
- 其中ζi>0, 可以看出, 这其实是将原本的虚线超平面向图像的上方和下方移动, 其符号的处理方式和我们原来讲解过的把符号放入ω是一模一样的方式, 松弛系数其实很好理解, 来看上面的图像, 位于红色点附近的紫色点xp在原本的判别函数中必定会被分为红色, 所以一定会判错, 现在我们作为一条与决策边界平行, 但是过点xp的直线ω•x+b=1-ζi(图中蓝色虚线). 这条直线是由ω•xi + b =1平移得到, 所以两条直线在纵坐标上的差异就是ζ(竖直的黑色箭头),而点xp到ω•xi + b = 1的距离就可以表示为ζω/||ω||, 即ζ在ω方向上的投影, 由于单位向量是固定, 所以ζ可以作为点xp在原始的决策边界上的分类错误程度的表示, 隔的越远,分的越错, 但注意ζ并不是点到决策超平面的距离本身
- 不难注意到, 我们让ω•x+b≥1-ζi作为我们的薪决策超平面, 是由一定的问题的, 虽然我们吧异常的紫色点分类正确了, 但我们同时也分错一系列红色的点, 所以我们必须在我们求解最大边际的损失函数中加上一个惩罚项, 用来惩罚我们具有巨大松弛系数的决策超平面, 我们的拉格朗日函数, 拉格朗日对偶函数, 也因此都被松弛系数改变, 现在,我们的损失函数为:
- 其中C是用来控制惩罚的惩罚力度的系数
- 我们的拉格朗日函数为(其中μ是第二个拉格朗日乘数)
- 满足的KKT条件是:
- 拉格朗日对偶函数为:
- 这种状况下的拉格朗日对偶函数看起来和线性可分张狂下的对偶函数一模一样, 按时需要注意的是在这个函数中, 拉格朗日乘数α的取值限制改变了, 在硬间隔的状况下, 拉格朗日乘数值需要大于等于0, 而现在它被要求不能够大于用来控制惩罚力度的系数C, 有了对偶函数之后,我们求解过程和硬间隔的步骤一致, 以上所有的公式都是以线性硬间隔数据为基础, 考虑软间隔存在的情况和数据是非线性的状况而来的, 而这些公式,就是sklearn类SVC背后使用的最终公式,
重要参数C
- 参数C用于权衡训练样本的正确分类与决策函数的边际最大化两个不可同时弯沉的目标,
参数 | 含义 |
C |
浮点数, 默认1, 必须大于等于0, 可不填 松弛系数的惩罚系数, 如果C设定比较大, 那SVC可能选择边际较小, 能够更好地分类所有训练点的决策边界, 不过模型训练时间也会更长, 如果C设定值越小, 那SVC会尽量最大化边界, 决策功能会更简单, 但代价是训练的准确度, 换句话说, C在SVM中的影响就想正则化参数对逻辑回归的影响 |
SVC参数列表:
C |
浮点数, 可不填, 默认是1.0 松弛系数的惩罚项系数, 如果C值设定比较大, 那SVC可能会选择边际较小的, 能够更好的分类,所有训练点的决策边界, 如果C设定的值较小, 那SVC会尽量最大化边界 决策功能会更简单,但代价是训练的准确度, 换句话说, C在SVM中的影响就像正则化参数对逻辑回归的影响 |
kernel |
字符, 可不填, 默认是"rbf" 指定要在算法中使用的核函数类型, 可以输入"linear", "poly", "rbf", "sigmoid", "precomputed"或者可调用对象, 如果给出可调用对象, 则这个功能会更简单,但代价 是训练的准确度, 换句话说, C在SVM中的影响就想像正则化参数对逻辑回归的影响 |
degree |
整数, 可不填, 默认"rbf" 多项式核函数的次数("poly"), 如果核函数没有选择"poly",这个参数会被忽略 |
gamma |
浮点数, 可不填, 默认是3 多项式核函数的次数('poly'), 如果核函数没有选择"poly", 这个参数会被忽略 |
gamma |
浮点数, 可不填, 默认是auto 核函数的系数, 仅在参数kernel的选项为"rbf", "poly", 和"sigmoid"的时候有效, 当输入"auto", 只送使用1/(n_features)作为gamma的取值,早sklearn0.22 版本中, 将可输入"scale", 则使用1/(n_features*xstd()作为gamma的取值,若输入"auto_deprecated", 则表示没有传递明确的gamma的值 |
coef0 |
浮点数, 可不填, 默认是0.0 核函数中的独立香, 它只在参数kernel为poly和sigmoid的时候有效 |
shrinking |
布尔值, 可不填, 默认是True 是否使用收缩启发式计算, 如果使用, 优势可以加速最优化的计算进程, 加速迭代速度 |
probability |
布尔值, 可不填, 默认是False 是否启用概率估计, 必须调用fit之前启用它, 启用此功能会减慢SVM的运算速度 |
tol |
浮点数, 可不填, 默认是le-3 停止迭代的容差 |
cache_size |
浮点数, 可不填, 默认是200 指定核函数占用的缓存的大小, (以MB为单位) |
class_weight |
字典, "balanced", 可不填 对SVC, 将类的参数C设置为class_weight[i]*C, 如果没有给出具体的class_weight, 则所有类都占用相同的权重, "Balanced"模式使用y的值自动调整与输入数据中的类 频率成反比的权重n_samples/(n_class*np.bincount(y)) |
verbose |
布尔值, 默认False 启用详细输出, 请注意, 此设置利用libsvm中的"进程前运行时间设置", 如果启用, 则可能无法在多线程上下文中正常运行 |
max_iter |
整数, 可不填, 默认是-1 最大迭代次数, 输入-1. 表示没有限制 |
decision_function_shape |
可输入"ovo", "ovr", 默认是"ovr" 对所有分类器中, 是否返回结构(n_samples, n_classes)的one-rest-rest(ovr)决策函数, 或者返回libsvm中原始的, 结构为(n_samples), n_classes*(n_classes-1)/2 的one-vs-one(ovo)决策函数, 但是,一对一(ovo)总是在多分类问题中使用 |
random_state |
整数, 随机数种子, None, 可不填, 默认是None 在对数据进行混洗以用于概率估计时使用伪随机数种子生成器, 如果输入整数, 则random_state是随机数生成器使用的随机数种子, 如果是RandomState实例, 则random_state是 随机数生成器, 如果伪None, 则随机数生成器是np.random使用的RandomState实例 |
SVC属性列表
属性 | 形态 | 含义 |
support_ | 类数组, 结构=[n,sv] | 支持向量的索引 |
support_vectors_ | 类数组, 结构=[n,SV, n_features] | 支持向量本身 |
n_support_ | 类数组, 类型为int32, 结构=[n_class] | 每个类支持向量数 |
dual_coef_ | 数组, 结构=[n_class-1, n_SV] | 决策函数中支持向量的系数, 对于多分类问题而言, 是所有ovo模式分类器中的系数, 多类情况下系数的布局不是非常重要 |
coef_ | 数组 结构=[nclass*(n_class-1)/2, n_features] | 赋予特征的权重(原始问题中的系数), 这个属性仅适用于线性内核, coef_是从dual_coef_和support_vectors派生的只读属性 |
intercrpt_ | 数组, 结构=[n_class*(n_class-1)/2] | 决策函数中的常量, 在二维平面上是截距 |
fit_status | 整数 | 如果正确拟合, 则显示0, 否则1, |
SVC的接口列表:
接口 | 输入 | 含义 |
decision_function | 特征矩阵x |
返回x中每个样本到划分数据集的超平面的距离, 结构为(n_samples,).如果decision_function_shape="ovr", 则返回的矩阵结构为(n_samples, n_classes) |
fit |
特征矩阵x, 真实标签y [,samples_weight] |
如果x和y不是c顺序的, 并且np.float64和x的连续数组不是scipy.sparse.crs_matrix, 则x和y可能会被复制 |
predict | 测试集的矩阵x | 对x中的样本进行分类, 返回结构为(n_samples) |
score |
特征矩阵x, 真实标签y [sample_weight] |
在多标签分类中, 这是子集精度, 子集精度是一个非常严格的度量, 因为自己精度要求为每个样本预测的每个标签必须是真确的 |
set_params | 想要替换的新参数 | 设置此估算器的参数 |
get_params | 无需输入 | 获取此估算工具的参数 |
predict_log_proba | 特征矩阵 |
计算x中样本在所有可能分到的类下的对数概率, 每个列按所有类出现在属性classes_中的顺序排列 模型需要在训练时计算 概率信息: probability参数必须被设置为True 概率模型是使用交叉验证创建的, 因此结果可能与通过预测获得的结果略有不同, 此外, 他可能在非常小的数据集上生产无意义结果 |
predict_proba | 特征矩阵x |
计算x中样本在所有可能分到的类下的概率, 每个列按所有类出现在属性classes_中的顺序排列 模型需要在训练时,计算概率信息: probability参数必须设置为True 概率模型是使用交叉验证创建的, 因此结果科恩那个与通过预测获得的结果略有不同, 此外, 它可能在非常小的数据集上产生无意义的结果 |