Libsvm 中的决策值
Posted
技术标签:
【中文标题】Libsvm 中的决策值【英文标题】:Decision values in Libsvm 【发布时间】:2012-06-17 07:38:18 【问题描述】:我是 SVM 的新手。我将 Libsvm 用于 Matlab,在预测阶段之后,我得到了一个决策值数组。来自 SVM 理论:如果
f(z)=1
其中 f(z) 定义为
f(z)=sign(w*z+b)
那么,如何将实例 z 的数组中的决策值与 f(z) 关联起来? 基于决策值的预测是否是:如果 dec_value>0 则 z 为正,否则 z 为负?
【问题讨论】:
【参考方案1】:是的,你是对的,如果 f(z) 为正,则实例属于 +1 类,如果为负,则属于 -1 类。 f(z) 的值是不可解释的。
当函数:
f(z) = 符号(w*z+b)
看起来像超平面的方程,不同之处在于 w 不是法向量 - 它的长度不是 1,所以 f(z) 的值不是到超平面的距离,这就是为什么要指定它作为sign(..),为了明确该值仅用于确定实例落在超平面的哪一侧。
一些背景:
我们的目标是找到在两个类之间给出最大边距的超平面:
所以,目的是最大化边距,即,因此最小化。请记住,通常当使用 w 将超平面表示为法线向量时, 为 1。这里显然不是这种情况,因为不会有优化问题。我们没有保持 = 1 并改变边距的宽度,而是将边距的宽度固定为2,并允许 改变大小。
这给了我们primal optimization problem(带有软边距):
这似乎是您所指的。然而,这个方程来自基本的软最大边距分类器,它是 SVM 的基础。真正的 SVM 被表述为 Lagrangian dual 以允许使用内核。 SVM 的巧妙之处在于,当上述问题(及其约束)用拉格朗日公式表示时,除拉格朗日乘数之外的所有变量都退出了,给我们留下了以下问题:
注意没有w。训练点 x(y 是标签,1 或 -1),现在仅作为点积一起出现,允许我们使用 kernel trick 获得非线性模型。
但如果我们没有w,我们的决策函数是什么?它成为我们的支持向量和我们发现的拉格朗日乘数的函数。
这是 libsvm 生成的内容,并将其存储为您训练的模型。它存储支持向量和相关的 alpha。对于线性支持向量机,您可以获得原始的w,this is explained here in the LibSVM FAQ,但它不会是您从 LibSVM 自动返回的,这只能对线性内核进行。 p>
基于拉格朗日乘数和支持向量的 SVM 决策函数的值也只能通过其符号来解释。
【讨论】:
【参考方案2】:阅读文档告诉我:
第三个[返回值]是一个包含决策值或概率的矩阵 估计值(如果指定了“-b 1”)。如果 k 是类的数量 训练数据,对于决策值,每一行包括 预测 k(k-1)/2 个二元类 SVM。
所以对于一个二分类问题,你得到的是一个包含决策值f(z)
的向量,所以这意味着属于第一类的所有东西都有 d0。
一般来说:libsvm 认为它的第一个类是它获得的第一个标签,依此类推。因此,为了获得可靠的结果,您需要先对数据进行排序。
在二进制情况下也是如此:无论您为 svmtrain 提供什么标签,它都会将遇到的第一个标签作为 1 类,将第二个标签作为 -1 类。这可以通过提供一个简单的数据集来简单地验证:
Y = [-ones(100,1);ones(100,1)];
m = svmtrain(Y,Y); % train with all labels as data (never do this in practices, not the "all" part, not the training on labels part ;)
[a,b,c] = svmpredict(Y,Y,m); % of course this will give 100% accuracy.
b' % you can see that the first label will always have an internal representation of 1.
对于多类分类,这是不同的:它包含 k(k-1)/2 个条目,对应于每个像素的所有一对一的类场景。 这意味着例如。一个 4 类问题,每个样本有 4*3/2 = 6 个值:
[ f12(z) f13(z) f14(z) f23(z) f24(z) f34(z)]
现在这些函数值如何通过一对一的方式映射到类,我无法通过查看代码轻松推断出......但我猜你最感兴趣的是 2 类案例,不是吗?
【讨论】:
我对二进制分类很感兴趣。我的问题是我想知道决策值的含义。所以如果 d 编辑帖子以获得更多解释。 我修复了一些我自己误解文档的错误:s. 所以决策值是 f(z) 对吧?我可以赋予决策价值什么意义?示例z到超平面(决策边界)的距离是多少? 你不能给决策值赋予任何意义——它只是一个有符号的值。如果内核是线性的,则可以确定与决策函数的距离,但是 w 不是法线向量,因此为了获得距离,也必须在那里进行一些修改。在非线性情况下,您根本无法确定距离,因为它在低维空间中毫无意义。以上是关于Libsvm 中的决策值的主要内容,如果未能解决你的问题,请参考以下文章