在 sklearn 中使用样本和类权重

Posted

技术标签:

【中文标题】在 sklearn 中使用样本和类权重【英文标题】:Using sample and class weights in sklearn 【发布时间】:2020-09-09 09:25:32 【问题描述】:

我正在尝试在高度不平衡的样本上运行随机森林。样本权重和类别权重都存在问题。但是,当我使用 sklearn 文档包含适当的权重时,我仍然得到高度不平衡的预测。例如,我的班级权重为

'A': 0.05555555555555555, 'B': 1.0, 'C': 1.0

这应该将数据重新加权为大约 60% A、25% B、15% C。但是,当我使用权重运行模型时,我在拟合类概率上得到或多或少相同的结果。我还尝试使用“平衡”选项进行测试,但我仍然得到高度偏斜的结果(预测 A 的每次观察的概率接近 1)。我已经尝试过使用和不使用样本权重以及使用和不使用类权重,我得到或多或少相同的结果。我执行不正确吗?

        clf=RandomForestClassifier(n_estimators=1000,class_weight=class_weights)
        clf=RandomForestClassifier(n_estimators=1000)
        clf.fit(x,y,sample_weight=weights)

        print("Accuracy: ",metrics.accuracy_score(y, clf.predict(x)))

        new_arts = pd.DataFrame(data=clf.predict_proba(full_data_scaled),
                                columns=clf.classes_,
                                index=full_data_scaled.index.values)

【问题讨论】:

【参考方案1】:

首先要检查的是分类器相对于数据集的实际维度。您在这两种情况下都使用 1000 个估算器。如果您使用的是小型数据集,这可能会高度过拟合。

其次,我假设您使用基尼标准进行拆分。也许您可以检查标准“熵”是否产生相同的输出。

【讨论】:

以上是关于在 sklearn 中使用样本和类权重的主要内容,如果未能解决你的问题,请参考以下文章

如何在sklearn逻辑回归中设置样本权重?

Python使用sklearn构建ElasticNet回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型

Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型

sklearn StackingClassifier 和样本权重

Sklearn k-means聚类(加权),确定每个特征的最佳样本权重?

带加权样本的弹性网络回归或套索回归(sklearn)