1

我是 SVM 的初学者。在我的项目中,我使用 SVM 对文本进行分类。数据集是笔记本电脑评论,我分为两类,“好评”和“差评”。我已经完成了训练、测试和分类,但是有一些事情让我很困惑,我想问一下。

  1. 以下是已缩放为 [-1,1] 的 SVM 格式数据的两个示例:

    1st -> 1:-0.648936 2:-0.641171 3:-0.62963 4:-0.576841 5:-1 6:-1 7:-0.894737 8:-1 9:-0.225806 10:-0.641026 11:-0.481481 12:-1 13:-1 14:-0.5 15:-0.235294 16:-0.882353
    
    2nd -> 1:-0.457447 2:-0.668316 3:-0.111111 4:-0.386705 5:-1 6:-1 7:-0.578947 8:-1 9:0.0967742 10:-0.25641 11:-0.24183 12:0.333333 13:0.333333 14:-0.5 15:-0.230769 16:-0.884615
    

    第一个产生分数 5.4750172361043,而第二个产生 0.99999999999985。我想知道为什么?我认为,如果我查看上面的数据,第二个实例比第一个实例具有更好的价值。而且如果我查看原始文本数据审查,我认为第二个实例比第一个实例具有“更好”的审查类别。那么为什么输出分数和我预期的不一样呢?

  2. 上面 SVM 结果的输出产生巨大的价值,甚至超过 -1 和 1,这是否正常?所有数据集的整个结果的最小 SVM 得分为 -4.5085001691845,最大得分为 7.1355405169311。我不太确定,但我认为结果通常介于 -1 和 1 之间。有什么问题吗?

  3. 我应该怎么做才能得到结果,因为你们都认为是正常的?我的意思是,评论类别的好实例的值介于 0 和 1 之间或更多(如 1.135645),而差评的值约为 0 至 -1(或如 -1.0573545)

只是我的问题的附加信息:

  • 我使用来自网站 phpir.com (Ian Barber) 的 SVM 求解器库
  • 我使用的参数 C 和 gamma 仍然是默认的,我还没有做交叉验证
  • 我在这里举了几个好评或差评的例子:http: //pastebin.com/cqDK7WA6

请帮助我,我真的是这方面的初学者,也许我不明白基本的 SVM 概念,所以我需要你的解释,对不起我的英语不好。

4

2 回答 2

1

决策值从 -5 变为 7 的事实本身并不是问题。SVM 求解器唯一优化的是决策值的符号。支持向量机认为给出 5.47 的数据点与给出 0.99 的数据点来自同一类。

一些建议:

  • 我看到你正在做的真正问题是你没有在寻找一个好的 C 和 gamma 值。如果不这样做,您可能会得到任意糟糕的结果。重要的是要知道你的分类器对以前看不见的数据的整体表现如何,并在有没有好的 C 和 gamma 的情况下进行比较。
  • 看来您正在使用 RBF 内核,这似乎是合理的。然而,自然语言处理和情感分析中的许多应用都报告了使用线性内核的更好结果。

这是另一个问题,其中包含使用 SVM 时要验证的事项清单: Supprt Vector Machine works in matlab, doesn't work in c++

于 2013-06-16T19:38:54.183 回答
1

实际上已经朝着这个方向进行了一些研究。每个 SVM 分类器的输出值可以从 [−∞;∞] 映射到 [0;1],主要通过 platt 缩放或等渗回归。详细可以在这篇论文中找到:Predicting Good Probabilities With Supervised Learning, In Proc。诠释。会议。关于机器学习 ( ICML ) 2005,第 625--632 页

于 2014-09-21T09:57:51.507 回答