使用 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 错误地考虑了最终选择最佳模型的训练结果