为每个属性分配的属性选择

时间:2018-01-19 07:07:44

标签: java eclipse weka

我通过使用Eclipse IDE for Java Development将weka与java结合使用。版本:霓虹灯4.6。

我想知道如何提取像:

这样的值

为每个属性分配的相关性排名。

为每个属性分配的SVM-RFE排名属性和权重值

我想在屏幕上看到这些值。

我正在使用weka: 我试过这段代码:

public class AttributeSelectionTest {
      protected static void useRanker(Instances data) throws Exception {
            SVMAttributeEval  eval = new SVMAttributeEval();
            eval.buildEvaluator(data);
            Evaluation evaluation = new Evaluation(data);

            System.out.println(eval.getPercentToEliminatePerIteration());

            System.out.println(eval.attsToEliminatePerIterationTipText());

           eval.getPercentToEliminatePerIteration();
     for (int classInd = 0; classInd <  data.numAttributes(); classInd++)
              System.out.println(eval.rankBySVM(classInd,data));

         System.out.println(evaluation.toSummaryString());

          }



  public static void main(String[] args) throws Exception {
    // load data
         System.out.println("\n0. Loading data");
    DataSource source = new DataSource("data.arff"); 
    Instances data = source.getDataSet();

    if (data.classIndex() == -1)
      data.setClassIndex(data.numAttributes() - 1);


   useRanker(data);

  }
}

1 个答案:

答案 0 :(得分:2)

要获得SVM-RFE排名,请使用以下代码。使用文件数据并使用fileHandler加载

Dataset dataSet = FileHandler.loadDataset(new File("sample.data"), 4, ",");

RecursiveFeatureEliminationSVM svmrfe = new RecursiveFeatureEliminationSVM(0.2);

svmrfe.build(dataSet);

for (int i = 0; i < svmrfe.noAttributes(); i++)
    System.out.println(svmrfe.rank(i));

对于相同的数据,您可以将属性选择排名设为

ASEvaluation eval = new GainRatioAttributeEval();

ASSearch search = new Ranker();

WekaAttributeSelection attributeSelection = new WekaAttributeSelection(eval,search);

wekaattrsel.build(dataSet);

for (int i = 0; i &lt; attributeSelection.noAttributes(); i++) 
    System.out.println("Attribute : " +  i +  "  Ranks : " + attributeSelection.rank(i));