2

我有一个高度不平衡的数据集,我想从中获得分类(二进制)和概率。我已经设法使用逻辑回归和随机森林来使用类权重从 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 一样?
4

1 回答 1

0
  1. 有关样本和班级权重差异的描述,请参阅此帖子的回复。一般来说,如果你使用类权重,你会“让你的模型意识到”类的不平衡。如果你使用样本权重,你会让你的模型意识到某些样本必须“更仔细地考虑”或根本不考虑。

  2. fit_params 参数应该可以完成这项工作,请参见此处

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

于 2020-06-17T22:40:59.460 回答