2015-11-25 4 views
-3

Я работаю над проектом, и мне нужно несколько примеров, как реализовать RandomForest в Java с weka? Я сделал это с IBk(), это сработало. Если я делаю это с RandomForest таким же образом, он не работает. У кого-нибудь есть простой пример для меня, как реализовать RandomForest и как получить вероятность для каждого класса (я сделал это с IBk с функцией classifier.distributionForInstance(instance), и это вернуло мне вероятности для каждого класса). Как я могу это сделать для RandomForest? Мне нужно будет получить вероятность каждого дерева и объединить его?RandomForest с Weka в Java

//example 

ConverrterUtils.DataSource source = new ConverterUtils.DataSource ("..../edit.arff); 
Instances dataset = source.getDataSet(); 
dataset.setClassIndex(dataset.numAttributes() - 1); 
IBk classifier = new IBk(5); classifier.buildClassifier(dataset); 

Instance instance = new SparseInstance(2); 
instance.setValue(0, 65) //example data 
instance.setValue(1, 120); //example data 
double[] prediction = classifier.distributionForInstance(instance); 

//now I get the probability for the first class 
System.out.println("Prediction for the first class is: "+prediction[0]); 
+0

Можете ли вы показать минимальный рабочий пример того, что вы пытались использовать с «IBk», где он работал, чтобы мы могли понять, чего вы пытаетесь достичь? –

+0

Я только что добавил рабочий пример в качестве нового ответа! – dulevw

ответ

1

можно рассчитать по Infogain в то время как ПОСТРОЕНИЕ модели в RandomForest. Он намного медленнее и требует много памяти при построении модели. Я не уверен в документации. вы можете добавлять опции или setValues ​​при построении модели.

//numFolds in number of crossvalidations usually between 1-10 

    //br is your bufferReader 
    Instances trainData = new Instances(br); 
    trainData.setClassIndex(trainData.numAttributes() - 1); 

    RandomForest rf = new RandomForest(); 
    rf.setNumTrees(50); 

    //You can set the options here 
    String[] options = new String[2]; 
    options[0] = "-R";     
    rf.setOptions(options); 

    rf.buildClassifier(trainData); 


    weka.filters.supervised.attribute.AttributeSelection as = new weka.filters.supervised.attribute.AttributeSelection(); 
    Ranker ranker = new Ranker(); 



    InfoGainAttributeEval infoGainAttrEval = new InfoGainAttributeEval(); 
    as.setEvaluator(infoGainAttrEval); 
    as.setSearch(ranker); 
    as.setInputFormat(trainData); 
    trainData = Filter.useFilter(trainData, as); 

    Evaluation evaluation = new Evaluation(trainData); 
    evaluation.crossValidateModel(rf, trainData, numFolds, new Random(1)); 


    // Using HashMap to store the infogain values of the attributes 
    int count = 0; 
    Map<String, Double> infogainscores = new HashMap<String, Double>(); 

    for (int i = 0; i < trainData.numAttributes(); i++) { 
     String t_attr = trainData.attribute(i).name(); 
     //System.out.println(i+trainData.attribute(i).name()); 
     double infogain = infoGainAttrEval.evaluateAttribute(i); 
     if(infogain != 0){ 
       //System.out.println(t_attr + "= "+ infogain); 
       infogainscores.put(t_attr, infogain); 
       count = count+1; 
     } 
    } 

    //iterating over the hashmap 

    Iterator it = infogainscores.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pair = (Map.Entry)it.next(); 
     System.out.println(pair.getKey()+" = "+pair.getValue()); 
     System.out.println(pair.getKey()+" = "+pair.getValue()); 
     it.remove(); // avoids a ConcurrentModificationException 
    } 
+0

Что делает «InfoGainAttributeEval»? Где в вашем примере вы получаете результаты от деревьев? – dulevw

+0

** InfoGainAttributeEval ** будет оценивать ценность атрибута путем измерения коэффициента усиления информации относительно класса. Я применил фильтр в trainData 'trainData = Filter.useFilter (trainData, as)', а затем сохранил в Оценке, который вычисляется в цикле for и добавлен в HashMap. Примите ответ, если он ответит на ваш вопрос. – Maxi

+0

@Maxi Как я могу напечатать дерево в java –

Смежные вопросы