使用 fitctree 训练具有不平衡训练集的更敏感模型

Posted

技术标签:

【中文标题】使用 fitctree 训练具有不平衡训练集的更敏感模型【英文标题】:Using fitctree to train a more sensitive model with an imbalanced training set 【发布时间】:2018-07-26 19:17:54 【问题描述】:

我正在尝试在 MATLAB 中构建决策树以进行二元分类。每个实例都有 4 个功能。正类中大约有 25,000 个实例,负类中大约有 350,000 个实例。

我尝试在分类学习器应用程序和使用 fitctree 中构建分类器,但两者似乎都只是将所有内容都识别为负类。我猜 MATLAB 正在构建树以产生最高的“准确性”。

有没有办法将决策树构建为更敏感的模型? (即不是“准确度”,我可以使用 fitctree 来构建灵敏度为 70/80/90% 或灵敏度和特异性相似的模型吗?)

【问题讨论】:

【参考方案1】:

两种直接的处理方法是:

对少数类进行过采样或对多数类进行欠采样,以创建具有平衡类大小的训练集。既然你有这么多的实例可以玩,我认为欠采样应该没问题,即使用所有正类实例和随机选择的负类实例子集,但如果你的数据较少,那么过采样技术@ 987654321@很受欢迎。 使用Prior 参数到fitctree 来指定每个类的先验概率,而不是让fitctree 从类大小中计算它(默认):

'Prior' — 先验概率'empirical' (default) | 'uniform' | vector of scalar values | structure

每个的先验概率 类,指定为由'Prior' 和 以下之一。

一个字符向量:'empirical' 确定类概率 Y 中的类频率。如果您通过观察权重,fitctree 使用 计算类概率的权重。 “统一”设置所有 类概率相等。 ...

在您的情况下,只需将 'Prior', 'uniform' 添加到 fitctree 的参数即可。

无论您选择哪个选项,请记住,您用于评估分类器性能的测试集应该具有正负类的真实分布(或者,您期望在真实数据中遇到的分布)。

【讨论】:

以上是关于使用 fitctree 训练具有不平衡训练集的更敏感模型的主要内容,如果未能解决你的问题,请参考以下文章

具有单独训练和验证集的 GridSearchCV 错误地考虑了最终选择最佳模型的训练结果

在 scikit-learn 中处理不平衡测试集的最佳方法

当给定特定类的 0 个样本时,如何对不平衡的数据集进行分类?

机器学习:处理非平衡数据集的办法

新数据集在现有模型下运行不好

python 观察具有不同k值的训练和测试集的准确度分数如何不同