【问题标题】:How to purposely overfit Weka tree classifiers?如何故意过拟合 Weka 树分类器?
【发布时间】:2011-03-14 10:13:07
【问题描述】:

我有一个二进制类数据集 (0 / 1),它对“0”类有很大的倾斜(大约 30000 对 1500)。每个实例有 7 个特征,没有缺失值。

当我使用 J48 或任何其他树分类器时,几乎所有“1”实例都被错误分类为“0”。

将分类器设置为“未修剪”,将每个叶子的最小实例数设置为 1,将置信度因子设置为 1,添加带有实例 ID 号的虚拟属性 - 所有这些都没有帮助。

我就是无法创建过拟合数据的模型!

我也尝试了 Weka 提供的几乎所有其他分类器,但得到了相似的结果。

使用 IB1 可以获得 100% 的准确率(trainset on trainset),因此具有相同特征值和不同类别的多个实例不是问题。

如何创建完全未修剪的树? 或者以其他方式迫使 Weka 过度拟合我的数据?

谢谢。

更新:好吧,这太荒谬了。我只使用了大约 3100 个负例和 1200 个正例,这就是我得到的树(未修剪!):

J48 unpruned tree
------------------

F <= 0.90747: 1 (201.0/54.0)
F > 0.90747: 0 (4153.0/1062.0)

不用说,IB1 仍然提供 100% 的精度。

更新 2: 不知道我是怎么错过的 - 未修剪的 SimpleCart 可以工作,并且在火车上提供 100% 的准确率;修剪后的 SimpleCart 不像 J48 那样有偏见,并且具有不错的误报率和误报率。

【问题讨论】:

标签: machine-learning weka


【解决方案1】:

Weka 包含两个感兴趣的元分类器:

它们允许您使任何算法对成本敏感(不限于 SVM)并指定成本矩阵(各种错误的惩罚);将1 实例错误分类为0 会比将0 错误分类为1 给予更高的惩罚。

结果是算法会尝试:

最小化预期的错误分类成本(而不是最可能的类别)

【讨论】:

  • 谢谢,这正是我使用的解决方案。
【解决方案2】:

快速而肮脏的解决方案是重新采样。丢弃除 1500 个正例之外的所有正例,并在平衡的数据集上进行训练。我很确定 Weka 中有一个重采样组件可以做到这一点。

另一种解决方案是对每个类使用具有可变成本的分类器。我很确定 libSVM 允许您这样做,而且我知道 Weka 可以包装 libSVM。不过我已经有一段时间没有使用 Weka 了,所以在这里我无法提供太多实际帮助。

【讨论】:

  • 谢谢。我不确定重采样是否有效——从我所做的实验来看,即使在一个相当平衡的数据集(每个类 1000 个示例)上,J48 和其他分类器(SimpleCart 除外)也会得到荒谬的结果——对于类来说,要么是非常高的 FP 要么是 FN 0”或“1”类的非常高(另一个类的分类大多正确)。关于成本敏感分类 - 我完全忘记了,我会尽快调查。谢谢!
  • 成本敏感的方法奏效了。我仍然不明白为什么未修剪的 J48 不会在训练集上给我 100% 的准确率,或者为什么带有 J48 的相当平衡的数据集仍然给出荒谬的输出。但至少现在我有一些工作要做。谢谢!
猜你喜欢
  • 2021-03-07
  • 1970-01-01
  • 2013-09-22
  • 2013-05-24
  • 2012-07-16
  • 2015-03-24
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多