计算样本权重#

sklearn.utils.class_weight.compute_sample_weight(class_weight, y, *, indices=None)[source]#

为不平衡数据集按类别估计样本权重。

参数:
class_weight字典、字典列表、“balanced”或None

与类相关的权重,形式为{class_label: weight}。如果未给出,则所有类的权重都假定为1。对于多输出问题,可以按 y 的列顺序提供字典列表。

请注意,对于多输出(包括多标签),应为每一列的每个类在其自己的字典中定义权重。例如,对于四类多标签分类,权重应为[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}],而不是[{1:1}, {2:5}, {3:1}, {4:1}]

"balanced"模式使用 y 的值自动调整权重,使其与输入数据中类频率成反比:n_samples / (n_classes * np.bincount(y))

对于多输出,y 的每一列的权重将相乘。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的 {数组、稀疏矩阵}

每个样本的原始类别标签数组。

indices形状为 (n_subsample,) 的类数组,默认值为 None

在子样本中使用的索引数组。在子样本的情况下,长度可以小于n_samples,或者在具有重复索引的bootstrap子样本的情况下等于n_samples。如果为None,则样本权重将针对整个样本计算。如果提供此参数,则只有"balanced"适用于class_weight

返回:
sample_weight_vect形状为 (n_samples,) 的ndarray

应用于原始y的样本权重数组。

示例

>>> from sklearn.utils.class_weight import compute_sample_weight
>>> y = [1, 1, 1, 1, 0, 0]
>>> compute_sample_weight(class_weight="balanced", y=y)
array([0.75, 0.75, 0.75, 0.75, 1.5 , 1.5 ])