如何使用SVM对不平衡数据集进行分类?

问题描述 投票:-1回答:1

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

python svm imbalanced-data
1个回答
0
投票

你可以有很多方法来处理不平衡数据集。我最常用的有以下几种。

  1. 惩罚错误的输出。如果类 A 的样本量比班级少得多 B那你就可以增加因错误分类而产生的罚款。A.

  2. 使用 SMOTE 模块。它基本上是将给定类中的两个点的凸组合,并将其赋予与所选的两个点相同的标签。

其他可能的选择可以包括查看不同的评价指标和验证策略,如 分层K折.


0
投票

有几种方法可以调整一个不平衡的数据集,将其用于回归classification。这里我将介绍过采样和欠采样的方法。

过采样你重复了少数族裔类的数据,即使你的数据中有完全相同的行。在 欠采样 您挑选所有具有类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),允许你得到的数据有点不平衡,这样你的模型就知道数据不完全平衡。

© www.soinside.com 2019 - 2024. All rights reserved.