我正在使用SVM,我的数据集是不平衡的。我得到的结果是,它把0级分类为99%,1级分类为1%。有什么方法可以使用SVM对不平衡数据集进行正确分类。
有几种方法可以调整一个不平衡的数据集,将其用于回归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),允许你得到的数据有点不平衡,这样你的模型就知道数据不完全平衡。