为何J48与PART分类器将乌龟误分为昆虫?(基于zoo.arff数据集)
Weka J48与PART分类器对zoo.arff中乌龟的误分问题
我用Weka的J48和PART分类器处理zoo.arff数据集,按剪枝决策树和PART决策列表的逻辑,乌龟应该被分类为爬行动物,但两款分类器都把它误判成了昆虫。已经确认zoo.arff里乌龟的属性是正确的,之前怀疑backbone属性有误但已经排除,请问问题出在哪?
J48剪枝树
feathers = false | milk = false | | backbone = false | | | airborne = false | | | | predator = false | | | | | legs <= 2: invertebrate (2.0) | | | | | legs > 2: insect (2.0) | | | | predator = true: invertebrate (8.0) | | | airborne = true: insect (6.0) | | backbone = true | | | fins = false | | | | tail = false: amphibian (3.0) | | | | tail = true: reptile (6.0/1.0) | | | fins = true: fish (13.0) | milk = true: mammal (41.0) feathers = true: bird (20.0)
PART决策列表
feathers = false AND milk = true: mammal (41.0) feathers = true: bird (20.0) backbone = false AND airborne = false AND predator = true: invertebrate (8.0) backbone = false AND legs > 2: insect (8.0) fins = true: fish (13.0) backbone = true AND tail = true: reptile (6.0/1.0) aquatic = true: amphibian (3.0) : invertebrate (2.0) Number of Rules : 8
问题排查方向
- 分类器分支/规则匹配优先级
PART的规则是按顺序匹配的,backbone = false AND legs > 2: insect这条规则排在爬行动物规则之前。如果分类器判定乌龟的backbone为false,会优先触发昆虫规则;J48的树结构里,backbone = false分支下legs>2时直接判为昆虫,说明乌龟的样本走到了这个错误分支。 - 属性编码与类型一致性
即使你手动确认backbone属性正确,仍需检查arff文件中该属性的定义(比如@attribute backbone {true,false})和乌龟样本的对应值是否完全匹配——有没有大小写错误(如"True")、非布尔值编码(如用1/0代替true/false),Weka对属性类型匹配要求严格,不匹配会导致解析错误。 - 其他属性值的影响
检查乌龟的legs属性值是否大于2,若同时分类器误判backbone为false,就会触发昆虫分类;另外确认tail、fins等属性值是否符合爬行动物分支的条件,是否因某个属性值不符合,导致分类器走向错误分支。
内容的提问来源于stack exchange,提问作者saltpeter-pan
相关产品推荐
相关产品推荐

