【问题标题】:How to Classify the imbalanced Dataset using SVM如何使用 SVM 对不平衡数据集进行分类
【发布时间】:2020-09-25 13:42:00
【问题描述】:

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

【问题讨论】:

    标签: python svm imbalanced-data


    【解决方案1】:

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

    1. 错误输出的惩罚:如果A类的样本比B类少得多,那么你可以增加对错误分类A的惩罚。

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

    其他可能的选项包括查看不同的评估指标和验证策略,例如Stratified K Fold

    【讨论】:

      【解决方案2】:

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

      过采样中,您会复制少数类的数据,即使您的数据中有完全相同的行也是如此。在欠采样中,您选择所有具有类 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),允许您获得的数据有点不平衡,以便您的模型知道数据不完全平衡。

      【讨论】:

        猜你喜欢
        • 2019-05-14
        • 2018-03-27
        • 2017-03-17
        • 2020-09-16
        • 2018-09-13
        • 2020-09-06
        • 1970-01-01
        • 2020-06-18
        • 2019-09-24
        相关资源
        最近更新 更多