scikit-learn:随机森林class_weight和sample_weight参数

use*_*047 17 python scikit-learn

我有一个类不平衡问题,并使用scikit-learn(> = 0.16)中的实现尝试加权随机森林.

我注意到实现在树构造函数中采用了class_weight参数,在fit方法中采用了sample_weight参数来帮助解决类不平衡问题.这两个似乎成倍增加,以决定最终的重量.

我无法理解以下内容:

  • 在树构建/训练/预测的哪些阶段使用了这些权重?我看过一些关于加权树的文章,但我不确定scikit实现了什么.
  • class_weight和sample_weight之间究竟有什么区别?

And*_*eus 16

RandomForests建立在树木上,这些树木都有很好的记录.检查Trees如何使用样本权重:

  • 决策树用户指南 - 准确说明使用的算法
  • 决策树API - 解释如何使用sample_weight(对于随机森林,如您所确定的,它是class_weight和sample_weight的乘积).

至于class_weight和之间的区别sample_weight:很多可以简单地通过它们的数据类型的性质来确定.sample_weight是1D长度数组,n_samples为每个用于训练的示例分配显式权重.class_weight可以是每个类的字典,也可以是该类的统一权重(例如{1:.9, 2:.5, 3:.01}),或者是告诉sklearn如何自动确定该字典的字符串.

因此,给定示例的训练权重是其明确命名sample_weight(或者1如果sample_weight未提供)的产物,并且它是class_weight(或者1如果class_weight未提供).