我的问题如下:
我正在使用weka的ADTree进行分类。我在具有超过1700个属性的数据集上构建分类器。生成的ADTree仅使用它们中的一小部分来对实例进行分类(使用了近10个属性)。
我的问题是,由于我的实例的属性计算很耗时,我可以检索ADTree使用的属性标识符吗? 我的目标是只计算相关属性,让另一个属性为默认值,以避免非常长且无用的计算。
提前致谢。
答案 0 :(得分:0)
最后找到解决方案。不得不扩展ADTree以实现我的目标
public class ExtendedADTree extends ADTree {
private static final long serialVersionUID = 1L;
/**
* @param dataset
* The dataset to use to retrieve attributes labels.
*
* @return Returns the list of label used to predict the class of an instance knowing the
* dataset used to compute the tree.
*/
public List<String> getPredictionNodeLabels(final Instances dataset) {
final List<String> result = new LinkedList<>();
// Initialize the list of splitter node to explore.
final List<Splitter> nodesToExplore = new LinkedList<>();
@SuppressWarnings("unchecked")
final Enumeration<Splitter> rootChildrens = this.m_root.children();
Collections.list(rootChildrens).forEach(child -> nodesToExplore.add(child));
while (!(nodesToExplore.isEmpty())) {
// while there is node to explore get the splitter childrens of the current node and add
// them to the queue
final Splitter currentNode = nodesToExplore.remove(0);
// add the label of the splitter node to the result
result.add(currentNode.attributeString(dataset));
// add the childrens to the nodesToexplore list.
for (int branch_number = 0; branch_number < currentNode.getNumOfBranches(); branch_number++) {
final PredictionNode child = currentNode.getChildForBranch(branch_number);
final Enumeration<Splitter> childChildren = child.children();
Collections.list(childChildren).forEach(childOfChild -> nodesToExplore.add(childOfChild));
}
}
return result;
}
}
此方法返回属性的决策节点标签列表。