如何故意使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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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