Machine learning 如何在Weka分类器中按重要性对特征进行排序?

Machine learning 如何在Weka分类器中按重要性对特征进行排序?,machine-learning,nlp,weka,feature-selection,text-classification,Machine Learning,Nlp,Weka,Feature Selection,Text Classification,我使用Weka成功地构建了一个分类器。我现在想评估我的功能的有效性或重要性。为此,我使用属性选择。但我不知道如何输出不同的特性及其相应的重要性。我只想列出的功能,在他们的信息增益分数降序 在Weka中,有许多对特征进行评分的方法,称为属性。这些方法作为的子类提供 这些评估类中的任何一个都会给你每个属性的分数。例如,如果您使用信息增益进行评分,您将在类infogainattributeval中使用它。有用的方法是 infogainattributeval.html#buildEvaluator(

我使用Weka成功地构建了一个分类器。我现在想评估我的功能的有效性或重要性。为此,我使用属性选择。但我不知道如何输出不同的特性及其相应的重要性。我只想列出的功能,在他们的信息增益分数降序

在Weka中,有许多对特征进行评分的方法,称为属性。这些方法作为的子类提供

这些评估类中的任何一个都会给你每个属性的分数。例如,如果您使用信息增益进行评分,您将在类
infogainattributeval
中使用它。有用的方法是

  • infogainattributeval.html#buildEvaluator()
    ,以及
  • infogainattributeval.html#evaluateAttribute()
其他类型的特征评分(增益比、相关性等)具有相同的评分方法。使用其中任何一个,您都可以对所有功能进行排名

排名本身独立于Weka。在众多方法中,这是一种:

Map<Attribute, Double> infogainscores = new HashMap<Attribute, Double>();
for (int i = 0; i < instances.numAttributes(); i++) {
    Attribute t_attr = instaces.attribute(i);
    double infogain  = evaluation.evaluateAttribute(i);
    infogainscores.put(t_attr, infogain);
}
Map infogainscores=newhashmap();
对于(int i=0;i
现在您有了一个需要按值排序的映射。下面是一个通用代码:

 /**
  * Provides a {@code SortedSet} of {@code Map.Entry} objects. The sorting is in ascending order if {@param order} > 0
  * and descending order if {@param order} <= 0.
  * @param map   The map to be sorted.
  * @param order The sorting order (positive means ascending, non-positive means descending).
  * @param <K>   Keys.
  * @param <V>   Values need to be {@code Comparable}.
  * @return      A sorted set of {@code Map.Entry} objects.
  */
 static <K,V extends Comparable<? super V>> SortedSet<Map.Entry<K,V>>
 entriesSortedByValues(Map<K,V> map, final int order) {
     SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<>(
         new Comparator<Map.Entry<K,V>>() {
             public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) {
                 return (order > 0) ? compareToRetainDuplicates(e1.getValue(), e2.getValue()) : compareToRetainDuplicates(e2.getValue(), e1.getValue());
         }
     }
    );
    sortedEntries.addAll(map.entrySet());
    return sortedEntries;
}
/**
*提供{@code-Map.Entry}对象的{@code-SortedSet}。如果{@param order}>0,则按升序排序

*如果{@param order},则按降序排列。谢谢。我使用属性选择和InfoGainatTributeval作为属性求值器,Ranker作为搜索方法。但我不知道什么方法允许选择具有相应相关性(或重要性)的属性。我在java程序中使用它们。你说的“选择具有相应相关性的属性”是什么意思?根据信息增益分数选择(或不选择)属性。之后,实际分数可能会也可能不会起任何作用(取决于分类器)。我想知道每个功能的重要性。哪些属性与数据分类最相关。我想评估每个属性的相关性,以比较它们。据我所知,你已经在尽一切努力获得分数。更高的信息增益意味着更好的分类识别能力。只需按信息增益分数的降序列出功能!这就是我想要的。您如何列出这些功能?类似这样的排名属性:0.354 attr1 0.333 attr2 0.316 attr4 0.304 attr3
private static <V extends Comparable<? super V>> int compareToRetainDuplicates(V v1, V v2) {
    return (v1.compareTo(v2) == -1) ? -1 : 1;
}