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

Hag*_*gai 7 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)
Run Code Online (Sandbox Code Playgroud)

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

更新2:不知道我是如何错过它的 - 未经训练的SimpleCart工作并且在火车上提供100%准确度的训练; 修剪过的SimpleCart并不像J48那样有偏见,并且具有不错的误报率和负面比率.

Amr*_*mro 5

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

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

结果是该算法将尝试:

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


Sto*_*ken 2

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

另一种解决方案是使用每个类别具有可变成本的分类器。我非常确定 libSVM 允许您执行此操作,并且我知道 Weka 可以包装 libSVM。然而,我已经有一段时间没有使用 Weka 了,所以我不能在这里提供太多实际帮助。