weka[2] - J48(一)

本文详细介绍了Weka中J48决策树算法的分裂过程,对比了C4.5和ID3的区别。内容涵盖BinC45Split的BuildClassify方法,包括处理枚举属性和数值属性的细节,以及如何通过信息增益率选择最佳分裂点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原本想一次性写完关于J48,无奈整个weka关于J48的一套东西太多太多。

先从split开始分析~J48是参考的C4.5的决策树算法。

这一个部分和ID3有一些的区别,第一:C4.5使用信息增益率来选特征,第二:C4.5可以同时处理连续和离散的属性.(剪枝后面会加)

所以先看看weka的J48中,分裂是如何实现的。

BinC45Split

BuildClassify:

public void buildClassifier(Instances trainInstances)
       throws Exception {

    // Initialize the remaining instance variables.
    m_numSubsets = 0;
    m_splitPoint = Double.MAX_VALUE;
    m_infoGain = 0;
    m_gainRatio = 0;

    // Different treatment for enumerated and numeric
    // attributes.
    if (trainInstances.attribute(m_attIndex).isNominal()){
      handleEnumeratedAttribute(trainInstances);
    }else{
      trainInstances.sort(trainInstances.attribute(m_attIndex));
      handleNumericAttribute(trainInstances);
    }
  }    
m_attIndex就是选择的分裂属性的下标。 下面的if判断该属性值如果是离散(Nominal)的,那么调用handleEnumeratedAttribute,如果是连续的(numeric),那么调用handleNumericAttribute。

handleEnumeratedAttribute:

private void handleEnumeratedAttribute(Instances trainInstances)
       throws Exception {
    
    Distribution newDistribution,secondDistribution;
    int numAttValues; //m_attIndex对应属性的取值个数
    double currIG,currGR;
    Instance instance;
    int i;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值