我正在使用 SVM,我的数据集不平衡。我得到的结果是将 0 级分类为 99%,将 1 级分类为 1%。有什么方法可以使用 SVM 正确分类不平衡数据集。
问问题
58 次
2 回答
0
您可以通过多种方式处理不平衡的数据集。我最常用的几个:
对错误输出的惩罚:如果 class
A
的样本比 class 少得多B
,那么您可以增加因 class 的错误分类而产生的惩罚A
。使用SMOTE模块。它基本上采用给定类中两个点的凸组合,并为其分配与两个选定点相同的标签。
其他可能的选项包括查看不同的评估指标和验证策略,例如Stratified K Fold。
于 2020-06-06T11:15:46.200 回答
0
有几种方法可以调整不平衡数据集以将其用于回归/分类。这里我将描述过采样和欠采样的方法。
在oversampling中,您复制少数类的数据,即使您的数据中有完全相同的行。在欠采样中,您选择所有具有类 1 的数据并选择具有标签 0 的相同数量的样本(如果您有大量样本,这只是一个不错的选择)。
您也可以混合使用两者。就像是:
def obtain_equal_idx(idx_0, idx_1, n_samples, ratio_unbalance):
idx_1_repeated = np.repeat(idx_1, (n_samples // len(idx_1)) + 1)
idx_0s = np.random.choice(idx_0, ratio_unbalance * (n_samples // 2), replace=False)
idx_delay = np.random.choice(idx_1_repeated, n_samples // 2, replace=False)
return np.concatenate([idx_0s, idx_delay])
作为idx_0
标记为 0 的整个数据集的索引,idx_1
与标记为 1 的数据相同,n_samples
是您想要获取的样本数,并且ratio_unbalance
是允许您获取的数据的数字(通常为 2 或 3)有点不平衡,以便您的模型知道数据不完全平衡。
于 2020-06-06T11:22:12.493 回答