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

scikit-learn多标签分类中样本权重的使用方法咨询

在多标签分类中为OneVsRest+SGDClassifier设置样本权重

好问题!在多标签分类场景下,用OneVsRestClassifier包裹SGDClassifier时传递样本权重的方式,和二分类逻辑基本一致,只需要注意数据格式的匹配即可。

核心逻辑

OneVsRestClassifier的fit方法原生支持接收sample_weight参数,它会自动把这个权重传递给每个内部的SGDClassifier实例,让每个标签对应的二分类器都能使用样本权重进行训练。

完整代码示例

下面是一个完整的实操案例,包含多标签转换、模型定义和权重传递:

from sklearn.linear_model import SGDClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import MultiLabelBinarizer

# 准备多标签样本数据
X = [[0.0, 0.0], [1.0, 1.0], [2.0, 2.0], [3.0, 3.0]]
# 原始多标签格式:每个样本可对应多个标签
y = [[0], [1], [0, 1], [1]]

# 把多标签转换为scikit-learn要求的二进制矩阵格式
mlb = MultiLabelBinarizer()
y_binary = mlb.fit_transform(y)

# 定义样本权重:每个样本对应一个权重值(一维数组,长度等于样本数)
sample_weight = [1.0, 0.5, 2.0, 1.5]

# 用OneVsRestClassifier包裹SGDClassifier
multi_clf = OneVsRestClassifier(SGDClassifier(loss="hinge"))
# 直接在fit时传入sample_weight参数即可
multi_clf.fit(X, y_binary, sample_weight=sample_weight)

细节说明

  • 一维权重(常用场景):上面示例中的sample_weight是一维数组,每个元素对应一个样本的权重。这种情况下,每个标签对应的二分类器都会使用同一组权重训练,适合你希望给整个样本赋予统一权重的场景。
  • 二维权重(特殊场景):如果需要针对不同标签给同一个样本设置不同权重,可以传递一个形状为(样本数, 标签数)的二维数组。此时每个标签的分类器会取对应列的权重进行训练,这种需求在实际业务中相对少见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:31:32