我正在处理 3 个类别 [0,1,2] 的分类问题,类别分布不平衡,如下所示。
我想将XGBClassifier(在 Python 中)应用于此分类问题,但该模型不会响应class_weight调整并偏向多数类 0,并且忽略少数类 1,2。除了其他哪些超参数class_weight可以帮助我?
我尝试过1)使用sklearn计算类别权重compute_class_weight;2)根据类别的相对频率设置权重;3) 并手动调整具有极值的类以查看是否发生任何变化,例如{0:0.5,1:100,2:200}. 但无论如何,它对分类器考虑少数类没有帮助。
观察结果:
我可以在二元情况下处理问题:如果我通过识别类 [1,2] 使问题成为二元分类,那么我可以通过调整使分类器正常工作scale_pos_weight(即使在这种情况下class_weight单独没有帮助)。但是scale_pos_weight,据我所知,适用于二元分类。对于多分类问题,是否有该参数的类似物?
使用RandomForestClassifier代替,我可以通过设置和调整XGBClassifier来解决问题。但是,由于某种原因,这种方法不适用于 XGBClassifier。class_weight='balanced_subsample'max_leaf_nodes
备注:我了解平衡技术,例如过采样/欠采样或 SMOTE。但我想尽可能避免它们,并且如果可能的话,更喜欢使用模型超参数调整的解决方案。我上面的观察表明,这适用于二进制情况。
python xgboost multiclass-classification xgbclassifier imbalanced-data
我正在使用 SMOTE 重新采样我的数据(多类)。
sm = SMOTE(random_state=1)
X_res, Y_res = sm.fit_resample(X_train, Y_train)
Run Code Online (Sandbox Code Playgroud)
但是,我收到此属性错误。任何人都可以帮忙吗?
我最近在 jupyter 中安装了 imblearn 包
!pip show imbalanced-learn
Run Code Online (Sandbox Code Playgroud)
但我无法导入这个包。
from tensorflow.keras import backend
from imblearn.over_sampling import SMOTE
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-20-f19c5a0e54af> in <module>
1 # from sklearn.utils import resample
2 from tensorflow.keras import backend
----> 3 from imblearn.over_sampling import SMOTE
4
5
~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/__init__.py in <module>
32 Module which allowing to create pipeline with scikit-learn estimators.
33 """
---> 34 from . import combine
35 from . import ensemble
36 from . import exceptions
~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/combine/__init__.py in …Run Code Online (Sandbox Code Playgroud) 我有一个非常不平衡的数据集。我使用 sklearn.train_test_split 函数来提取训练数据集。现在我想对训练数据集进行过采样,所以我用来计算 type1 的数量(我的数据集有 2 个类别和类型(type1 和 tupe2),但几乎所有的训练数据都是 type1。所以我不能过采样。
以前我曾经用我编写的代码分割训练测试数据集。在该代码中,所有类型 1 数据的 0.8 和所有类型 2 数据的 0.8 都在训练数据集中。
如何将此方法与 train_test_split 函数或 sklearn 中的其他分割方法一起使用?
*我应该只使用sklearn或我自己编写的方法。
training-data python-3.x scikit-learn oversampling imbalanced-data
我正在使用 PySpark 为业务问题实施流失分类模型,但我拥有的数据集不平衡。因此,当我训练模型时,我随机选择了一个 1 和 0 数量相等的数据集。然后我将模型应用于实时数据,预测的 1 和 0 的数量显然相等。
现在,我需要校准我的训练模型。但是我找不到在 PySpark 中做到这一点的方法。有没有人知道如何在 PySpark 中校准模型,可能类似于 CalibratedClassifierCV ?
我的数据集形状是 (91149, 12)
我使用 CNN 在文本分类任务中训练我的分类器
我发现培训准确度:0.5923和测试准确度:0.5780
我的班级有 9 个标签,如下所示:
df['thematique'].value_counts()
Corporate 42399
Economie collaborative 13272
Innovation 11360
Filiale 5990
Richesses Humaines 4445
Relation sociétaire 4363
Communication 4141
Produits et services 2594
Sites Internet et applis 2585
Run Code Online (Sandbox Code Playgroud)
模型结构:
model = Sequential()
embedding_layer = Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=maxlen , trainable=False)
model.add(embedding_layer)
model.add(Conv1D(128, 7, activation='relu'))
model.add(GlobalMaxPooling1D())
model.add(Dense(9, activation='sigmoid'))
model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics= ['categorical_accuracy'])
Run Code Online (Sandbox Code Playgroud)
我的多标签分类数据不平衡。我需要在 Keras 中使用 CNN 处理多页分类的不平衡数据。
我正在尝试在 R 中对不平衡数据集进行 SMOTE。我尝试为此安装“DMwR”包,但似乎该包已从 cran 存储库中删除。\n我收到错误:“包 \xe2\x80\x98DMwR\xe2\x80\x99 不可用(对于 R版本 4.0.2) "
\n谁能帮我解决这个问题吗?或者建议在 R 中使用 SMOTE 的任何其他包?
\n蒂亚!
\n我有一个多标签分类问题,我正试图用 Pytorch 中的 CNN 解决这个问题。我有 80,000 个训练示例和 7900 个类;每个示例可以同时属于多个类,每个示例的平均类数为 130。
问题是我的数据集非常不平衡。对于某些课程,我只有大约 900 个示例,大约为 1%。对于“过度代表”的类,我有大约 12000 个示例(15%)。当我训练模型时,我使用来自pytorch 的 BCEWithLogitsLoss和一个正权重参数。我按照文档中描述的相同方式计算权重:负例数除以正例数。
结果,我的模型几乎高估了每个班级……我得到的预测几乎是真实标签的两倍。而我的 AUPRC 仅为 0.18。尽管它比根本不加权要好得多,因为在这种情况下,模型将所有内容预测为零。
所以我的问题是,我如何提高性能?还有什么我可以做的吗?我尝试了不同的批量采样技术(对少数类进行过采样),但它们似乎不起作用。
导入“from imblearn.over_sampling import SMOTE”时,出现导入错误。请检查并提供帮助。我尝试升级 sklearn,但升级因“OSError”而被撤消。首先通过pip安装不平衡-学习。
!pip install -U imbalanced-learn
Run Code Online (Sandbox Code Playgroud)
使用 jupyter 笔记本
Windows 10
sklearn 版本 - 0.24.1
numpy 版本 - 1.19.5
--------------------------------------------------------------------------
ImportError Traceback (most recent call last)
Run Code Online (Sandbox Code Playgroud)
在 ----> 1 from imblearn.over_sampling import SMOTE
~\anaconda3\lib\site-packages\imblearn_ init _.py in 35 导入类型 36 ---> 37 from . 从 导入联合收割机 38。从 导入 ensemble 39 进口例外
~\anaconda3\lib\site-packages\imblearn\combine_ init _.py in 3 """ 4 ----> 5 from ._smote_enn import SMOTEENN 6 from ._smote_tomek import SMOTETomek 7
〜\anaconda3\lib\site-packages\imblearn\combine_smote_enn.py in 8 from sklearn.utils import check_X_y …
True然后,我在训练 LightGBM 模型时使用“is_unbalance”参数,将其设置为。下图显示了我如何使用此参数。
我的问题是:
is_unbalance正确吗?scale_pos_weight代替is_unbalance?谢谢!
imbalanced-data ×10
python ×6
imblearn ×3
scikit-learn ×3
smote ×2
boosting ×1
calibration ×1
keras ×1
lightgbm ×1
oversampling ×1
pyspark ×1
python-3.x ×1
pytorch ×1
r ×1
xgboost ×1