【问题标题】:Wrong ordering of class values in Weka Prediction DistributionWeka 预测分布中的类值排序错误
【发布时间】:2017-01-09 21:51:57
【问题描述】:

我添加了我的数据集的类属性,如下所示(训练集和测试集相同):

ArrayList<String> nomValues = new ArrayList<>();
nomValues.add("1");
nomValues.add("0");
datasetBinary_train.insertAttributeAt(new Attribute("class", nomValues), datasetBinary_train.numAttributes());

所以我假设值 1 位于位置 0,值 0 位于位置 1。

因此,我假设我使用NominalPrediction.distribution() 获得的double[] 在位置 0 处具有类“1”的类概率。

检查分类结果似乎反之亦然。

一个预测看起来像这样。

标称:1.0 0.0 1.0 0.6081479321383793 0.3918520678616207

其中 1 是实际类别,0 是预测类别(然后是权重,然后是分布)。我认为观察到标签“0”的概率更高,这意味着标记为“0”的实例的概率显示在索引 0 处

评估标题显示

@attribute (...)

@attribute 类 {1,0}

所以直到那里它有正确的顺序。

谁能告诉我属性值在评估中是如何排序的?如何保证选对了?

【问题讨论】:

    标签: java classification weka


    【解决方案1】:

    您将标签与标签索引混淆(Weka 在内部使用基于 0 的索引来表示标签):

    NOM: &lt;actual label index&gt; &lt;predicted label index&gt; &lt;weight&gt; &lt;distribution&gt;

    实际标签索引为1.0(“0”),预测索引为0.0(“1”),权重为1.0,分布为“0.61 0.39”。根据分布,预测第一个标签(0.0 或“1”)。

    【讨论】:

    • 非常感谢!这真的很令人困惑..但是是的,这是有道理的......这是否记录在某个地方?我没有在api中找到输出的格式。 IMO 值得一提的是在 Nominatprediction 的 toString()-Method 的描述中进行澄清
    • 预测类(数字和名义)无法访问数据集结构,因此很遗憾无法输出标签。此输出更多地用于调试目的。顺便说一句,使用数字作为标签首先会增加很多混乱。 ;-)
    • 我认为“0”为假而“1”为真是很常见的。不幸的是,这会造成这种混乱。虽然它绝对有意义并且比输出标签本身更容易(因为它可以是任何可能更难阅读的字符序列).. 你只需要知道它...... :)
    • 一个简单的方法来克服这个问题是拥有像 {0,1} facepalming 这样的类属性
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 2013-10-17
    • 2017-12-07
    • 2017-04-30
    • 2016-02-25
    • 2013-09-25
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多