结合重采样和特定算法处理类别不平衡

我正在处理一个多标签文本分类问题(总目标标签90个)。数据分布呈长尾,约有190万条记录。目前,我正在处理一个大约10万条记录的小样本,其目标分布相似。

一些算法提供了处理类别不平衡的功能,如PAC和LinearSVC。目前,我也在使用SMOTE生成除多数类之外的所有类别的样本,并使用RandomUnderSampler来抑制多数类的不平衡。

同时使用算法参数和imblearn管道来处理类别不平衡是否正确?

feat_pipeline = FeatureUnion([('text', text_pipeline)])estimators_list = [                   ('PAC',PassiveAggressiveClassifier(max_iter=5000,random_state=0,class_weight='balanced')),                   ('linearSVC', LinearSVC(class_weight='balanced'))                  ]estimators_ensemble = StackingClassifier(estimators=estimators_list,                                          final_estimator=LogisticRegression(solver='lbfgs',max_iter=5000))ovr_ensemble = OneVsRestClassifier(estimators_ensemble)classifier_pipeline = imblearnPipeline([        ('features', feat_pipeline),        ('over_sampling', SMOTE(sampling_strategy='auto')), # 重采样除多数类之外的所有类别;        ('under_sampling',RandomUnderSampler(sampling_strategy='auto')), # 重采样除少数类之外的所有类别;        ('ovr_ensemble', ovr_ensemble)    ])

回答:

同时使用算法参数和imblearn管道来处理类别不平衡是否正确?

让我们花点时间思考一下这可能意味着什么,以及它是否真的有意义。

用于处理类别不平衡的特定算法(或算法设置)自然期望数据中存在某种实际的不平衡。

现在,如果你已经人为地平衡了数据(使用SMOTE、多数类欠采样等),那么你的算法最终面对的将是一个平衡的数据集,而不是一个不平衡的数据集。不用说,这些算法无法“知道”它们看到的最终数据中的平衡是人为的;因此,从它们的角度来看,没有不平衡——因此不需要任何特殊的处理方法启动。

所以,这样做并不是错误的,但在这种情况下,这些特定算法/设置实际上将没有用,因为它们不会在处理类别不平衡方面提供额外的帮助。

引用我之前的一个旧回答(完全不同的问题,但一般思路具有普遍性):

深度神经网络领域仍然(非常)年轻,确实还没有建立其“最佳实践”指南;再加上一个了不起的社区的支持,有各种各样的工具以开源形式可用,你很容易发现自己处于一种(无疑是诱人的)位置,只是因为它们可用而混合使用这些工具。我并不是说你在这里试图做的是这样——我只是敦促在结合可能并非设计为一起工作的想法时要更加谨慎…

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注