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

在sklearn中为Complement Naive Bayes设置类权重遇值错误求助

解决Complement Naive Bayes中类权重的使用问题

你遇到的ValueError核心原因是:ComplementNB.fit()的sample_weight参数需要的是与训练样本数量一致的权重数组,而你传入的c_w是compute_class_weight返回的仅包含两个类别权重的数组(长度为2),和训练样本数(29752)不匹配,所以报错了。

下面给你两种正确使用类权重的方法:

方法1:将类权重转换为样本权重数组

先把计算好的类权重映射到每个训练样本上,生成和y_train长度一致的权重数组,再传入fit的sample_weight参数:

# 计算类权重
unique_classes = np.unique(y_train)
c_w = class_weight.compute_class_weight('balanced', unique_classes, y_train)
# 创建类别到权重的映射字典
class_weight_dict = dict(zip(unique_classes, c_w))
# 为每个训练样本生成对应的权重
sample_weights = y_train.map(class_weight_dict).values

# 初始化模型并训练
clf = ComplementNB()
clf.fit(x_train, y_train, sample_weight=sample_weights)

方法2:直接在模型初始化时设置class_weight参数

更简单的方式是,ComplementNB本身支持在初始化时直接传入class_weight参数,不用手动计算和转换。设置为'balanced'后,模型会自动根据样本数量计算均衡的类权重:

# 初始化模型时直接指定类权重
clf = ComplementNB(class_weight='balanced')
# 正常训练即可,无需额外传sample_weight
clf.fit(x_train, y_train)

这两种方法都能解决你的类别不平衡问题,方法2更简洁推荐使用。修改后你就可以正常训练模型并生成混淆矩阵了。

内容的提问来源于stack exchange,提问作者Cauê Evangelista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:23:08