-2

我正在使用 SVM,我的数据集不平衡。我得到的结果是将 0 级分类为 99%,将 1 级分类为 1%。有什么方法可以使用 SVM 正确分类不平衡数据集。

4

2 回答 2

0

您可以通过多种方式处理不平衡的数据集。我最常用的几个:

  1. 对错误输出的惩罚:如果 classA的样本比 class 少得多B,那么您可以增加因 class 的错误分类而产生的惩罚A

  2. 使用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 回答