scikit-learn:随机森林 class_weight 和 sample_weight 参数
scikit-learn: Random forest class_weight and sample_weight parameters
我有一个 class 不平衡问题,并且一直在使用 scikit-learn (>= 0.16) 中的实现来试验加权随机森林。
我注意到该实现在树构造函数中采用了 class_weight 参数和 sample_weight 参数在 fit 方法中帮助解决 class 不平衡问题。这两个似乎相乘决定了最终的权重。
我无法理解以下内容:
- 在树的哪个阶段 construction/training/prediction 使用这些权重?我看过一些关于加权树的论文,但我不确定 scikit 实现了什么。
- class_weight 和 sample_weight 到底有什么区别?
RandomForests 是建立在 Trees 之上的,Trees 有很好的文档记录。检查树如何使用样本权重:
- User guide on decision trees - 准确说明使用的算法
- Decision tree API - 解释树如何使用 sample_weight(对于随机森林,正如您所确定的,它是 class_weight 和 sample_weight 的乘积)。
至于 class_weight
和 sample_weight
之间的区别:很多可以简单地通过它们的数据类型的性质来确定。 sample_weight
是长度为 n_samples
的一维数组,为用于训练的每个示例分配明确的权重。 class_weight
是每个 class 的字典到那个 class 的统一权重(例如,{1:.9, 2:.5, 3:.01}
),或者是一个字符串告诉 sklearn 如何自动确定这个字典。
因此,给定示例的训练权重是明确命名为 sample_weight
(如果未提供 sample_weight
则为 1
)的乘积,它是 class_weight
(如果未提供 class_weight
,则为 1
)。
我有一个 class 不平衡问题,并且一直在使用 scikit-learn (>= 0.16) 中的实现来试验加权随机森林。
我注意到该实现在树构造函数中采用了 class_weight 参数和 sample_weight 参数在 fit 方法中帮助解决 class 不平衡问题。这两个似乎相乘决定了最终的权重。
我无法理解以下内容:
- 在树的哪个阶段 construction/training/prediction 使用这些权重?我看过一些关于加权树的论文,但我不确定 scikit 实现了什么。
- class_weight 和 sample_weight 到底有什么区别?
RandomForests 是建立在 Trees 之上的,Trees 有很好的文档记录。检查树如何使用样本权重:
- User guide on decision trees - 准确说明使用的算法
- Decision tree API - 解释树如何使用 sample_weight(对于随机森林,正如您所确定的,它是 class_weight 和 sample_weight 的乘积)。
至于 class_weight
和 sample_weight
之间的区别:很多可以简单地通过它们的数据类型的性质来确定。 sample_weight
是长度为 n_samples
的一维数组,为用于训练的每个示例分配明确的权重。 class_weight
是每个 class 的字典到那个 class 的统一权重(例如,{1:.9, 2:.5, 3:.01}
),或者是一个字符串告诉 sklearn 如何自动确定这个字典。
因此,给定示例的训练权重是明确命名为 sample_weight
(如果未提供 sample_weight
则为 1
)的乘积,它是 class_weight
(如果未提供 class_weight
,则为 1
)。