weka.attributeSelection.InfoGainAttributeEval太慢了。关于如何加快速度的任何想法?

时间:2014-10-31 20:02:50

标签: java weka

我正在开发一个应用程序,其中需要动态地动态地为特定的一组实例排序属性。现在,我使用信息增益对属性进行排名,但它有点太慢了。

注意:我使用的数据集有大约50,000个属性。

代码I正在运行,

AttributeSelection attsel = new AttributeSelection();
InfoGainAttributeEval eval = new InfoGainAttributeEval();
Ranker search = new Ranker();
attsel.setEvaluator(eval);
attsel.setSearch(search);
double[][] attrRanks = new double[data.numAttributes()][2];
try {
    attsel.SelectAttributes(data);
    attrRanks = attsel.rankedAttributes();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

事实证明排名实际上非常快,但创建~30,000 - 40,000个属性对象的过程需要一段时间。我删除了那部分代码,它开始工作正常。 新代码

GainRatioAttributeEval eval = new GainRatioAttributeEval();
try{
    eval.buildEvaluator(data);
} catch(Exception e) {
    LOGGER.error("Couldn't evaluate gain ratio", e);
}
Double infogain = Double.MIN_VALUE;
ObjectNode objNode;
int k, i;
double[][] ig = new double[data.numAttributes()][2];
for(int j=0;j<data.numAttributes();j++){
    try {
        ig[j][0] = j;
        ig[j][1] = eval.evaluateAttribute(j);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        LOGGER.error("Couldn't evaluate gain ratio for empty entrezIds.",e);
    }
}
Arrays.sort(ig, new Comparator<double[]>(){
    @Override
    public int compare(double[] o1, double[] o2) {
        // TODO Auto-generated method stub
          if (o1[1] > o2[1]) {
                return -1;
            } else if (o1[1] < o2[1]) {
                return 1;
            }
                    return 0;
    }
});
//Ig is sorted array.