【问题标题】:How to use class weights for GaussianNB and KNeighborsRegressor in sklearn?如何在 sklearn 中使用 GaussianNB 和 KNeighborsRegressor 的类权重?
【发布时间】:2020-10-07 10:20:32
【问题描述】:

我有一个高度不平衡的数据集,我想从中获取分类(二进制)和概率。我设法使用逻辑回归和随机森林来使用类权重从 cross_val_predict 获得结果。

我知道 RandomForestClassifier 和 LogisiticRegression 可以将类权重作为参数,而 KNeighborsRegressor 和 GaussianNB 则不能。但是,对于文档中的 KNN 和 NB,它说为此我可以使用包含样本权重的 fit:

fit(self, X, y, sample_weight=None)

所以我正在考虑通过计算类权重并根据样本的分类使用这些权重创建一个样本权重数组来解决这个问题。这是代码:

c_w = class_weight.compute_class_weight('balanced', np.unique(y), y)
sw=[]
for i in range(len(y)):
    if y[i]==False:
        sw.append(c_w[0])
    else:
        sw.append(c_w[1])

不确定这种解决方法是否有意义,但是我设法使用这种方法拟合了模型,而且我似乎在我的小班上得到了更好的结果。

现在的问题是我想在sklearn的中使用这个方法

cross_val_predict()

但是我无法通过交叉验证传递样本权重。

我有两个问题:

  1. 我使用样本权重代替班级权重的解决方法有意义吗?
  2. 有没有一种方法可以通过 cross_val_predict 传递样本权重,就像在不使用交叉验证的情况下使用 fit 时一样?

【问题讨论】:

    标签: scikit-learn cross-validation weighted imbalanced-data


    【解决方案1】:
    1. 请参阅this post 的回复以了解样本和类别权重差异的描述。一般来说,如果你使用类权重,你会“让你的模型意识到”类的不平衡。如果您使用样本权重,您可以让您的模型意识到某些样本必须“更仔细地考虑”或根本不考虑在内。

    2. fit_params 参数应该可以完成这项工作,请参阅here:

      fit_params : dict, defualt=None - 传递给估计器的 fit 方法的参数。

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2016-11-20
      • 2020-08-01
      • 2021-08-19
      • 2018-03-28
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多