【发布时间】:2016-10-29 14:30:36
【问题描述】:
我有两个输入类,0 和 5。我已经在训练数据上使用这两个标签训练了我的分类器。
在测试时,在明确分配给每个类之前,我希望获得 SVM 为每个实例计算的概率。
当我使用classifier.distributionForInstance() 时,我只能获得与每个实例相关的 0.000 和 1.000 值。
例如。 [0:1.000][5:0.000][0:1.000][5:0.000]
在为 arff 文件创建关系时,我将 label 属性定义如下 bw.write("@attribute label {0,5}"); ,其中 bw 是一个 BufferedWriter 对象。
获得SVM的中间概率值的过程应该是什么?
【问题讨论】:
-
看起来,您没有使用任何交叉验证方案来选择您的 SVM 参数,这会导致非常糟糕的预测(仅包含非常小的一组不同的值)。这意味着,
distributionForInstance只会转换已经很糟糕的预测值。 -
交叉验证,而预测没有任何意义?我已经进行了 2 折交叉验证,我得到的二进制分类结果非常好。我的查询是获取中间概率,以便我也可以使用这些预测将实例划分为中间类。我没有直接使用多类分类器,因为它碰巧会降低我系统的整体准确度。
-
中间类的概念听起来不太好(理论上)。使用 SVM 预测概率通常非常糟糕(因为它超出了概念范围;通常使用 Platt-scaling 和一些额外的等渗回归来完成)。通常,您只能进行排名。我不确定 Weka 在内部做什么。我对出了什么问题的假设/想法主要基于您在其他 SO 问题中提供的数字。这些预测数字(只有 3 个唯一值)看起来很可疑。
标签: java machine-learning classification svm weka