如何故意过度装配Weka树分类器?

时间:2010-07-11 07:10:16

标签: machine-learning 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那样有偏见,并且具有不错的假阳性和阴性比率。

2 个答案:

答案 0 :(得分:5)

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

它们允许您使任何算法成本敏感(不限于SVM)并指定成本矩阵(各种错误的惩罚);如果将1实例错误归类为0,则会将0错误地归类为1,从而给予较高的惩罚。

结果是算法将尝试:

  

尽量减少预期的错误分类成本(而非最可能的类别)

答案 1 :(得分:2)

快速而肮脏的解决方案是重新取样。扔掉除了1500个正面例子之外的所有例子并训练平衡的数据集。我很确定Weka中有一个重新采样组件可以做到这一点。

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