You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在加权数据集上运行Boruta遇sample_weight参数错误的解决办法

BorutaPy添加sample_weight报错的解决方法及BorutaShap替代方案

一、解决BorutaPy的sample_weight参数问题

BorutaPy的fit方法本身不支持直接传入sample_weight参数,报错是因为该参数未被定义在方法签名中。要实现样本权重的传递,需给基础分类器做一层包装,让它在训练时自动应用权重:

  1. 自定义带样本权重的随机森林分类器:
from sklearn.ensemble import RandomForestClassifier

class WeightedRandomForestClassifier(RandomForestClassifier):
    def __init__(self, sample_weight=None, **kwargs):
        super().__init__(**kwargs)
        self.sample_weight = sample_weight
    
    def fit(self, X, y, **kwargs):
        # 调用父类fit时自动传入保存的样本权重
        return super().fit(X, y, sample_weight=self.sample_weight)
  1. 使用包装后的分类器初始化BorutaPy并拟合:
# 初始化带权重的分类器,传入样本权重
forest = WeightedRandomForestClassifier(
    sample_weight=X['my_weighting'],
    n_jobs=-1,
    class_weight='balanced',
    max_depth=5
)

feat_selector = BorutaPy(forest, n_estimators='auto', verbose=0, random_state=1)
# 此时fit无需再传sample_weight
feat_selector.fit(np.array(X), np.array(y))

# 查看特征选择结果
feat_selector.support_
feat_selector.rankings_

二、BorutaShap的可行性

完全可行。BorutaShap作为Boruta算法的扩展实现,其fit方法原生支持sample_weight参数,无需额外修改分类器,直接传入即可:

from BorutaShap import BorutaShap
from sklearn.ensemble import RandomForestClassifier

# 初始化原随机森林分类器
forest = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)

# 初始化BorutaShap特征选择器
feat_selector = BorutaShap(model=forest, verbose=0, random_state=1)

# 直接传入sample_weight拟合
feat_selector.fit(X=X, y=y, sample_weight=X['my_weighting'])

# 查看结果
feat_selector.support_
feat_selector.rankings_

内容的提问来源于stack exchange,提问作者MC Jong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:07:48