【问题标题】:Output of RandomSubSpace classifier Weka API in JavaJava 中 RandomSubSpace 分类器 Weka API 的输出
【发布时间】:2015-12-08 16:34:24
【问题描述】:

我已经在 weka exploer 中构建了一个 RandomSubSpace 分类器,现在正尝试将它与 weka Java API 一起使用,但是,当我运行 distibutionForInstance() 时,我得到一个数组,其中 1.0 作为第一个值,0.0 作为所有休息。我试图得到数值预测而不是类。是否有我应该使用的不同功能或distributionForInstance上的不同选项?下面的代码片段:

Classifier cls = (Classifier) weka.core.SerializationHelper.read("2015-09-6 Random Subspace Model.model");

Instances originalTrain = new DataSource("Instances.arff").getDataSet();

         int cIdx=originalTrain.numAttributes()-1;
         originalTrain.setClassIndex(cIdx);


         int s1=1;  


         double value=cls.classifyInstance(originalTrain.instance(s1));


         double[] percentage=cls.distributionForInstance(originalTrain.instance(s1));



         System.out.println("The predicted value of instance "+Integer.toString(s1) +"Value: " + percentage[1]); 
         System.out.println(Arrays.toString(percentage));

这给了我如下所示的输出: 实例1Value的预测值:0.0 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 , 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

有人知道如何像我在 weka explorer 中那样获得数值输出吗?

提前致谢。

【问题讨论】:

    标签: java machine-learning weka


    【解决方案1】:

    方法:

    classif.distributionForInstance(instance);
    

    为每个不同的类返回该实例成员资格的双精度数组。如果您在 hte 第一个元素上得到 1.0,而在其余元素上得到 0.0,这意味着该算法对预测该特定实例的第一类非常有信心。其他时候,当成员资格不太清楚时,概率分布更均匀。

    【讨论】:

      【解决方案2】:

      当您对实例进行分类时,我们会为您提供类属性的索引。你必须映射,这个值:

      originalTrain.classAttribute().value((int) cls.classifyInstance(originalTrain.instance(s1))))

      【讨论】:

      • 感谢您的回答。我仍然得到类似的输出。对于我指定的任何实例,我一直将“TX”作为此函数的输出。我不知道那是从哪里来的。状态是数据集的一部分,所以我想知道它是否从那里获取 TX?
      • String value = originalTrain.classAttribute().value((int) cls.classifyInstance(originalTrain.instance(s1)))) 您是否尝试打印此值?
      • 是的,我做到了。我认为问题在于该模型预测的是一个数值而不是名义值,因此没有类成员资格。应该有一个类似于线性回归模型输出的数值预测。也许这些是错误的功能?它们似乎都与班级成员资格有关。
      • 是的,模型预测了一个double值,表示类属性值的索引。当你得到这个值时,你将得到谓词的名义类。
      • 感谢您的所有帮助。但是,我仍然有点困惑,据我了解,如果构建分类器来预测数字独立值,则没有名义类可以成为其成员。每次我运行 String percent=originalTrain.classAttribute().value((int) cls.classifyInstance(originalTrain.instance(s1)));我得到相同的输出,即字符串“TX”
      猜你喜欢
      • 2017-04-06
      • 2016-03-01
      • 1970-01-01
      • 2012-10-31
      • 2015-10-03
      • 2023-04-08
      • 2015-03-24
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多