考虑一个二元分类场景,其中 True 类 (5%) 与 False 类 (95%) 严重失衡。我的数据集包含数字数据。我正在使用 SKLearn 并尝试一些不同的算法,例如梯度提升分类器 (GCB)、随机森林 (RDC) 和支持向量分类器 (SVC)。由于不平衡的方面,我在所有方法(fit、score、confusion_matrix 等)中使用“sample_weight”并使用以下权重数组填充它,其中,True 值被赋予 20 值,False 值被赋予值为 1。
sample_weight = np.array([20 if i == 1 else 1 for i in y_test])
这应该是为了“平衡”分类。首先这是一个正确的方法吗?有什么影响?用真实数据增加样本量是不可能的。过度拟合将是另一个潜在的选择,但由于类之间存在显着差异,我想从“sample_weight”方法开始。
现在考虑这些结果:
GCB - 准确率 71%,准确率 74%,召回率 69%,F1 分数 71%
RFC - 准确率 67%,准确率 82%,召回率 47%,F1 分数 60%
SiVC - 准确率 63%,准确率 74%,召回率 45%,F1 分数 56%
GCB 在准确性方面优于其他算法。RFC 精度。Recall 在 RFC 和 SVC 中都非常糟糕,并且在 3 种情况下价值最小。
我的下一个问题主要是关于召回。假阴性是相当大的——如召回所示(在 SVC 案例中,55% 的实际 True 值被预测为 False);这是因为在原始数据集中有更多的 False 值吗?
在所有这些中,样本权重在哪里出现?样本权重不应该减轻吗?或者无论权重如何,类不平衡仍然会影响分类吗?在某些情况下比其他情况下更多(例如 RFC 和 SVC 比 GCB 更多)?