如何故意使Weka树分类器过拟合?

我有一个二元类数据集(0/1),其中“0”类的比例严重失衡(大约30000对1500)。每个实例有7个特征,没有缺失值。

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

将分类器设置为“不修剪”,将每个叶子节点的最小实例数设置为1,将置信因子设置为1,添加一个包含实例ID号的虚拟属性——所有这些都没有帮助。

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

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

使用IB1可以获得100%的准确率(在训练集上训练),所以这不是多个实例具有相同特征值但不同类别的问题。

我如何创建一个完全不修剪的树?或者如何强制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那么偏见,并且具有不错的假阳性和假阴性比例。


回答:

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

另一个解决方案是使用对每个类有不同成本的分类器。我相当确定libSVM允许你这样做,我知道Weka可以包装libSVM。不过我已经有一段时间没用Weka了,所以在这里我帮不上什么实际的忙。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注