You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C5.0决策树全量数据无节点、子集数据正常的技术咨询

分析C5.0全量数据无节点、子集数据正常生成决策树的问题

这种情况大概率是数据本身的特性或者算法默认参数适配性导致的,下面给你拆解几个最可能的原因,附带验证方法:

  • 目标变量分布极端失衡
    这是最常见的原因:如果全量204条数据里,第7列的目标变量几乎全是同一个类别(比如99%都是A类),C5.0算法会直接输出一个根节点(预测为占比最高的类别),因为分裂节点无法提升模型性能。而你取的前100条数据里,目标变量的类别分布相对均衡,所以算法能生成多节点的决策树。
    验证方法:分别查看全量和子集的目标变量分布:

    # 全量数据分布
    table(dataset1[,7])
    # 前100条数据分布
    table(dataset1[1:100,7])
    
  • 全量数据存在"完美分类"的特征
    如果全量数据里某个特征的某个取值,100%对应目标变量的某个类别,且这个特征覆盖了绝大多数样本,C5.0会直接用这个特征作为根节点,之后没有必要再分裂(所有样本都被正确分类),看起来就像"无节点"(实际是只有一个根节点)。而前100条数据里这种完美关联不存在,所以会继续分裂生成多节点树。

  • 全量数据的特征区分度下降
    随着样本量增加,某些特征可能出现大量重复取值、噪声数据,导致特征对目标变量的区分能力变弱,C5.0找不到有分裂价值的特征。比如某个特征在100条数据里有20个唯一值,但全量数据里因为噪声变成只有2个唯一值,自然无法用来分裂。
    验证方法:对比全量和子集的特征唯一值数量:

    # 全量数据特征唯一值数
    sapply(dataset1[,-7], function(x) length(unique(x)))
    # 前100条数据特征唯一值数
    sapply(dataset1[1:100,-7], function(x) length(unique(x)))
    
  • C5.0默认参数的适配问题
    C5.0默认有minCases参数(分裂节点所需的最小样本数,默认是2),但如果全量数据中,潜在分裂节点的样本数达不到这个阈值(或者其他参数如CF置信度阈值设置过高),算法就不会分裂。你可以尝试调整参数强制分裂:

    model = C5.0(dataset1[,-7], dataset1[,7], control = C5.0Control(minCases = 1, CF = 0.1))
    

优先排查顺序:先看目标变量分布,再检查特征分布,最后调整参数验证。

内容的提问来源于stack exchange,提问作者ferdianm10

火山引擎 最新活动