看过这篇博客的都应该明白,特征选择代码实现应该包括3个部分:
- 搜索算法;
- 评估函数;
- 数据;
因此,代码的一般形式为:
AttributeSelection attsel = new AttributeSelection(); // create and initiate a new AttributeSelection instance
Ranker search = new Ranker(); // choose a search method
PrincipalComponents eval = new PrincipalComponents(); // choose an evaluation method
attsel.setEvaluator(eval); // set evaluation method
attsel.setSearch(search); // set search method
attsel.SelectAttributes(data); // set the data to be used for attribute selection
其中,搜索方法和评估函数是不同的:
属性评估方法:
CfsSubsetEval:根据属性子集中每一个特征的预测能力以及它们之间的关联性进行评估。
GainRatioAttributeEval:根据与分类有关的每一个属性的增益比进行评估。
InfoGainAttributeEval:根据与分类有关的每一个属性的信息增益进行评估。
ChiSquaredAttributeEval:根据与分类有关的每一个属性的卡方值进行评估。
SymmetricalUncertAtrributeEval:根据与分类有关的每一个属性的对称不稳定性进行评估。
ClassifierSubsetEval:根据训练集或测试集之外的数据评估属性子集。
ConsistencySubsetEval:根据利用属性子集进行分类时得到的分类值的一致性进行评价。
CostSensitiveAttributeEval:根据使其基础子集评估开销敏感性,变化选择子集评估方法。
CostSentitiveSubsetEval:方法同上。
FilteresAttributeEval:运行在任意过滤器之后的数据上的任意属性评估。
FilteredSubsetEval:方法同上。
LatenSemanticAnalysis:根据数据的潜在的语义分析和转换进行评估,与随机搜索结合。
OneRAttributeEval:根据OneR分类器评估属性。
PrincipalComponents:根据数据的主要成分分析和转换进行评估。
ReliefFAttributeEval:通过反复测试一个实例和其同类或不同类中最近的实例上的属性值进行评估。
SignificanceAttributeEval:计算双向功能的概率意义评估属性值。
SymmetricalUncertAtrributeSetEval:根据与其他属性集有关的每一个属性的对称不稳定性进行评估。
WrapperSubsetEval:使用一种学习模式对属性集进行评估。
搜索算法:
BestFirst:可回溯的贪婪搜索扩张,最好优先原则。
ExhaustiveSearch:穷举搜索,从空集出发。
FCBFSearch:基于相关性分析的特征选择方法。相关性匹配搜索。
GeneticSearch:Goldberg(1989)提出的简单遗传算法。
GreedyStepwise:向前或向后的单步搜索。
LinearForwardSelection:线性向前搜索。
RaceSearch:比较特征子集的交叉验证错误情况。
RandomSearch:随机搜索。
Ranker:对属性值排序。
RankSearch:选择一个评估器对属性进行排序。
ScatterSearchV1:离散搜索。
SubsetSizeForwardSelection:按照特征子集大小向前线性搜索,这是线性搜索的扩展。
TabuSearch:禁忌搜索。
Subset Search Methods:
1. BestFirst
2. GreedyStepwise
3. FCBFSearch (ASU)
Subset Evaluation Methods:
1. CfsSubsetEval
2. SymmetricalUncertAttributeSetEval (ASU)
Individual Search Methods:
1. Ranker
Individual Evaluation Methods:
1. CorrelationAttributeEval
2. GainRatioAttributeEval
3. InfoGainAttributeEval
4. OneRAttributeEval
5. PrincipalComponents (used with a Rander search to perform PCA and data transform
6. ReliefFAttributeEval
7. SymmetricalUncertAttributeEval
代码样式可以参考:http://java-ml.sourceforge.net/content/feature-subset-selection