J48终于要到尾声了,前两篇算是简要说完了分裂和剪枝。下面可以进入正题,看看J48是如何工作的。
buildClassifier:
public void buildClassifier(Instances instances)
throws Exception {
//modelSelection表示选择二叉还是多叉进行分裂
//model在weka.classifier.trees.j48下面
ModelSelection modSelection;
if (m_binarySplits)
//二叉,min_NumObj表示分裂后的子集含有的instances数量必须大于这个数
modSelection = new BinC45ModelSelection(m_minNumObj, instances);
else
//多叉
modSelection = new C45ModelSelection(m_minNumObj, instances);
if (!m_reducedErrorPruning)
//2种剪枝策略
m_root = new C45PruneableClassifierTree(modSelection, !m_unpruned, m_CF,
m_subtreeRaising, !m_noCleanup);
else
m_root = new PruneableClassifierTree(modSelection, !m_unpruned, m_numFolds,
!m_noCleanup, m_Seed);
m_root.buildClassifier(instances);
if (m_binarySplits) {