我可以防止 J48 分类器在同一字段上分裂 x 次以上吗?

Can I prevent the J48 classifier from splitting on the same field more than x times?

使用数据集、Weka 和 J48 分类器,我得到了以下树:

它在右侧的 'NumTweets' 上分裂了很多。我可以防止 J48 在一个字段上进行超过指定数量的拆分吗?因为这显然在特定领域过度拟合了我的数据。理想情况下,我希望它只在分支中重复使用同一个字段 3-4 次。有什么办法可以做到这一点吗?

提前致谢!

回答您的第一个问题:不,WEKA 资源管理器不提供对特定属性的拆分限制。这只能在代码中手动完成。

话虽如此,您可以在此处尝试多种方法来限制树 size/reduce 过度拟合。

  1. 您可以尝试使用 REPTree 而不是 J48。它使用 与 J48 相同的分割标准,但使用减少的错误修剪。它有一个 限制树深度的选项。

  2. 降低 J48 修剪置信度(-C 参数)将导致更多的修剪,从而导致更小的树大小。

  3. 您可以尝试使用 minNumObj(到达每个叶子的最小实例数)参数。

没有。但是您可以将 J48 minNumObj 配置参数设置得更高。 (默认值为 2。)这对每个叶节点必须包含的数据元素的最小数量设置了约束。

通过这种方式(通过反复试验)您可以平衡 and/or 在某种程度上简化决策树。

也许您可以删除或忽略烦人的属性。也许将 NumTweets 离散化到 bin 中(例如 <1 tweet/day、<10 tweets/day、更多 > 10 个推文日)也有帮助?这可以通过预处理选项卡上的离散化过滤器来完成。