我有一个高度不平衡的数据集,我想从中获得分类(二进制)和概率。我已经设法使用逻辑回归和随机森林来使用类权重从 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()
但是我无法通过交叉验证来传递样本权重。
我有两个问题:
- 我使用样本权重代替班级权重的解决方法是否有意义?
- 有没有办法通过 cross_val_predict 传递样本权重,就像在没有交叉验证的情况下使用 fit 一样?