Python 如何利用支持向量机对不平衡数据集进行分类

Python 如何利用支持向量机对不平衡数据集进行分类,python,svm,imbalanced-data,Python,Svm,Imbalanced Data,我正在使用支持向量机,我的数据集是不平衡的。我得到的结果是,它将0类划分为99%,将1类划分为1%。是否有任何方法可以使用SVM正确分类不平衡数据集。有许多方法可以使用不平衡数据集。我最常用的是以下几种: 错误输出惩罚:如果类A的样本数远少于类B,则您可以增加类A错误分类的惩罚 使用模块。它基本上采用给定类中两个点的凸组合,并为其指定与两个选定点相同的标签 其他可能的选择包括查看不同的评估指标和验证策略,如。有几种方法可以调整不平衡的数据集,以将其用于回归/分类。这里我将描述过采样和欠采样方法

我正在使用支持向量机,我的数据集是不平衡的。我得到的结果是,它将0类划分为99%,将1类划分为1%。是否有任何方法可以使用SVM正确分类不平衡数据集。

有许多方法可以使用不平衡数据集。我最常用的是以下几种:

  • 错误输出惩罚:如果类
    A
    的样本数远少于类
    B
    ,则您可以增加类
    A
    错误分类的惩罚

  • 使用模块。它基本上采用给定类中两个点的凸组合,并为其指定与两个选定点相同的标签


  • 其他可能的选择包括查看不同的评估指标和验证策略,如。

    有几种方法可以调整不平衡的数据集,以将其用于回归/分类。这里我将描述过采样和欠采样方法

    在过采样中,即使数据中有完全相同的行,也会复制少数类的数据。在欠采样中选择所有具有类别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_
    是一个数字(通常为2或3)这使得您得到的数据有点不平衡,因此您的模型知道数据不是完全平衡的