J48(一)中,主要分析了分裂的策略:二叉和多叉
这一节,主要看看源码中,关于剪枝的部分。主要看PruneableClassifierTree。
buildClassify:
public void buildClassifier(Instances data)
throws Exception {
// can classifier tree handle the data?
getCapabilities().testWithFail(data);
// remove instances with missing class
data = new Instances(data);
data.deleteWithMissingClass();
Random random = new Random(m_seed);
//这个看的不是太懂啊!!感觉就是随机化一下
data.stratify(numSets);
//trainCV:表示分成numSets后,返回前numSets-1个,然后样本随机排序
//testCV: 表示分成numSets后,返回第numSets-1个
buildTree(data.trainCV(numSets, numSets - 1, random),
data.testCV(numSets, numSets - 1), !m_cleanup);
if (pruneTheTree) {
prune();
}
if (m_cleanup) {
cleanup(new Instances(data, 0));
}
}
这里主要就是buildTree,这个函数在classifierTree中。(PruneableClassifierTree继承自ClassifierTree)
还有一个是prune(),待会会分析,就是如何剪枝。
clearnup就是节省内存,把不需要的删掉。这里只是删掉数据的信息。
先看prune,再看buildTree。