【问题标题】:Parameters for Support Vector Regression using LibSVM in Matlab在 Matlab 中使用 LibSVM 进行支持向量回归的参数
【发布时间】:2013-05-25 03:16:03
【问题描述】:

我正在尝试使用 LibSVM 进行回归。我正在尝试检测人脸(10 类不同的人脸)。我将 1-10 标记为面类,11 标记为非面类。我想开发一个使用 LibSVM 的脚本,如果测试图像属于 10 个面部类别中的任何一个,它将给我一个介于 0-1 之间的连续分数,否则会给我 -1(非面部)。从这个分数,我可以预测我的课程。如果测试图像与 1st class 匹配,则分数应该在 0.1 左右。同样,如果测试图像与第 10 类匹配,则分数应该在 1 左右(任何接近 1 的连续值)。我正在尝试通过 LibSVM 使用 SVR 来解决这个问题。我可以很容易地通过分类得到预测的类。但我想要一个可以通过回归得到的连续分值。现在,我在网上寻找使用 LibSVM 的 SVR 的函数或函数中的参数,但我找不到任何东西。有人可以在这方面帮助我吗?

【问题讨论】:

  • 这仍然不是真正的回归。可以使用 Platt 缩放来预测 0 和 1 之间的值,这会将 SVM 转换为概率模型。

标签: matlab libsvm


【解决方案1】:

这不是回归问题。通过回归解决它不会产生好的结果。

您正在处理多类分类问题。解决这个问题的最佳方法是构建 10 个具有概率输出的一对多分类器。要获得概率输出(例如在 [0,1] 区间内),您可以使用 C-SVC 的 -b 1 选项 (-s 0) 进行训练和预测。

如果 10 个分类器中的任何一个为其正类产生足够大的概率,则使用该概率(接近 1)。如果 10 个分类器都没有产生具有足够高置信度的正标签,则可以默认为 -1。

简而言之:制作一个多类分类器,其中包含具有概率输出的一对多分类器。随后使用您选择的概率阈值(例如 0.7)对我描述的预测进行后处理。

【讨论】:

  • 谢谢马克。我试过那个。但是我很困惑如何为某个类获得某个正值(0.0 到 1.0 之间)。例如,如果图像足够接近 1 类,我想要一个理想的分数 0.1,如果测试图像足够接近 2 类,我想要 0.2,如果测试图像足够接近 3 类,我想要 0.3,依此类推(1.o如果测试图像足够接近 10 级)。此外,分数不能是离散的,意味着它的值可以是 6.56(在这种情况下,我会假设它与第 7 类非常接近。
  • @user2433638:您可以使用 2 个步骤来做到这一点:(1)找到其正类概率最高的分类器,假设它是概率 prob(k) (2) value = k 的类 k -1+概率(k)。如果您找到的最大概率低于您指定的阈值,则产生 -1。
  • )。现在,我可以使用参数 '-b 1' 获得分数并取最高概率分数进行分类(我已经这样做了),但是不同的类将具有相同的概率值(这意味着概率分数为 8.81,类 1或第 10 类或第 5 类可分为不同的执行方式)。相反,我希望分数为 8.81,我会知道测试图像被归类为第 9 类。”
  • 当你选择在 LIBSVM 中输出概率时,你仍然会得到预测的类标签。然后,您可以将生成的标签+概率后处理为您想要的形式。
  • value = k-1+prob(k),根据这个等式,假设我的概率得分为 0.35,k 为 7。现在上面的等式会给我答案 6.35(或 .635 )。但在这种情况下,我必须选择 6 级(而不是 7 级),因为 .635 比 0.7 更接近 0.6。
猜你喜欢
  • 2013-05-27
  • 2012-07-20
  • 2013-08-08
  • 2013-04-04
  • 1970-01-01
  • 2012-06-20
  • 2017-09-19
  • 2020-01-18
  • 2014-06-28
相关资源
最近更新 更多