python - 如何在 sklearn 算法中使用 sample_weight 参数

标签 python machine-learning scikit-learn

我有一个非常不平衡的数据集,我正在执行分类任务。因此,我尝试了所有算法,即(决策树、朴素贝叶斯、逻辑回归),对于每一种算法,我都在 scikit learn 中遇到了一个名为 sample_weights 的参数。

假设我的数据集中有大约 10 万个正数据点和 2 万个负数据点。
0.83 % 的正标签和 0.16 % 的负标签

根据文档,我假设此参数用于通过为具有较少数据点(即不平衡数据集)的类赋予更多权重来解决此类问题。

class_weight : dict or ‘balanced’, default: None

Weights associated with classes in the form {class_label: weight}. If not given, all classes are supposed to have weight one. For multi-output problems, a list of dicts can be provided in the same order as the columns of y.

我的问题是,对于上述不平衡数据集示例,我理想的 class_weights 应该是多少,这样我就可以避免过采样或欠采样等技术?

最佳答案

权重应该设置为balanced,这样训练的类就好像它们是平衡的。

类别权重相当于随机过采样。在我看来,智能过采样技术如 SMOTE是一种比在训练过程中给样本增加权重的方法更有效的方法。

但是,过采样技术会增加计算成本,因为模型需要在更大数据集上进行训练(由于过采样)。另一方面,类加权对模型没有额外的计算成本。除非训练非常计算量大的模型,否则我通常更喜欢 SMOTE。

关于python - 如何在 sklearn 算法中使用 sample_weight 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288023/

相关文章:

c++ - 在预期下执行的随机森林

validation - 如何使用 tf.session.run() 进行测试(不更新网络参数)?

python - keras:将 ImageDataGenerator 和 KFold 用于 fit_generator 的问题

scikit-learn - 在sklearnclassification_report中,average/total是什么意思?它是如何计算的?

python - 如何 "cut off the tail"系列

python - OpenCV-仅检测图像中的特定行

python - 根据行值将一行插入 Pandas 数据框中?

python - 不计算整个矩阵的 numpy 矩阵的对角线

python - SKLearn KMeans收敛警告

machine-learning - 当各个分类器适合不同的数据集时,如何在 sklearn 中构建投票分类器?