不平衡数据集的 Knn 分类器

Posted

技术标签:

【中文标题】不平衡数据集的 Knn 分类器【英文标题】:Knn classifier for Imbalanced dataset 【发布时间】:2019-11-05 22:49:20 【问题描述】:

我想估计分类器在我的不平衡数据集上的工作情况。当我尝试从 sklearn 拟合 KNN 分类器时,它对少数类一无所知。所以我所做的是我用 k = R 拟合分类器(其中 r 是不平衡比 1:R),我预测每个测试点的概率,如果少数类的分类器的概率输出,我将一个点分配给少数类大于 R(其中 r 是不平衡比 1: R)。我这样做是为了估计分类器的性能(F1-score)。我不需要生产中的分类器。我做的对吗?

【问题讨论】:

欢迎来到 SO。解决这个问题的方法是基于频率的重采样。 this question 的可能重复项。 我也处理过一次不平衡数据,那次我使用SMOTE并综合生成少数类示例,使得多数和少数类数据的比率变为1:1。你可以在这里查看 SMOTE imbalanced-learn.readthedocs.io/en/stable/generated/… 有没有不重采样的方法?? 老实说,我不知道,但作为替代方案,您可以从数据集中随机选择多数类数据,使得比率始终为 1:1 与少数类。 如果您不受使用分类器的限制,您可以尝试使用带有决策树或随机森林等参数的分类器,您可以在其中自己指定类权重。这样做你的模型也将开始选择少数类。实现细节请参考***.com/questions/37522191/…。 【参考方案1】:

由于您在 cmets 中提到您不想使用重采样,因此一种出路是批处理。从您的多数类创建多个数据集,以便它们与少数类的比例为 1:1。训练多个模型,每个模型获得多数集的一部分和所有少数集。对所有模型进行预测并从它们中投票并决定您的最终结果。

但我建议使用 SMOTE 而不是这种方法。

【讨论】:

以上是关于不平衡数据集的 Knn 分类器的主要内容,如果未能解决你的问题,请参考以下文章

处理Auto-Sklearn中多类分类的不平衡数据集的最佳方法

不平衡数据集的采样率

如何在 Python 中提高不平衡数据集的精度和召回率

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

使用分类权重,轻松解决数据不平衡的问题

大型多类 NLP 分类的不平衡数据和样本量