如何使用WEKA的评估类和Java代码显示标准偏差值

时间:2014-02-10 14:19:49

标签: java machine-learning classification weka

我正在写一个WEKA分类器。我使用了评估类(http://weka.sourceforge.net/doc.dev/weka/classifiers/Evaluation.html)的方法toSummaryString(),toMatrixString和toClassDetailString来显示结果。结果显示正确。但是,我想用每个结果显示标准偏差值,因为它们是通过使用WEKA的实验者GUI显示的。我怎样才能做到这一点 ?

2 个答案:

答案 0 :(得分:0)

要获得标准偏差,您需要使用Experiment类,然后获取统计信息。以下是一个示例:Using the Experiment API

答案 1 :(得分:0)

您可以使用以下代码:

package weka.api;
//import required classes
import weka.experiment.Stats;
import weka.core.AttributeStats;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;

public class AttInst {
    public static void main(String args[]) throws Exception{
        //load dataset
        DataSource source = new DataSource("D:/y.arff");
        //get instances object 
        Instances data = source.getDataSet();
        //set class index .. as the last attribute
        if (data.classIndex() == -1) {
           data.setClassIndex(data.numAttributes() - 1);
        }
        //get number of attributes (notice class is not counted)
        int numAttr = data.numAttributes() - 1;
        for (int i = 0; i < numAttr; i++) {
            //check if current attr is of type nominal
            if (data.attribute(i).isNominal()) {
                System.out.println("The "+i+"th Attribute is Nominal"); 
                //get number of values
                int n = data.attribute(i).numValues();
                System.out.println("The "+i+"th Attribute has: "+n+" values");
            }           

            //get an AttributeStats object
            AttributeStats as = data.attributeStats(i);
            int dC = as.distinctCount;
            System.out.println("The "+i+"th Attribute has: "+dC+" distinct values");

            //get a Stats object from the AttributeStats
            if (data.attribute(i).isNumeric()){
                System.out.println("The "+i+"th Attribute is Numeric"); 
                Stats s = as.numericStats;
                System.out.println("The "+i+"th Attribute has min value: "+s.min+" and max value: "+s.max+" and mean value: "+s.mean+" and stdDev value: "+s.stdDev );
            }

    }


    }
}