gpt4 book ai didi

matlab - SVM 对于不平衡数据集的性能较差 - 如何改进?

转载 作者:行者123 更新时间:2023-11-30 08:42:24 24 4
gpt4 key购买 nike

考虑一个数据集A,其中包含二元分类问题训练的示例。由于数据集高度不平衡,我使用了 SVM 并应用了加权方法(在 MATLAB 中)。我应用的权重与每个类别中数据的频率成反比。这是使用命令进行训练时完成的

 fitcsvm(trainA, trainTarg , ...
'KernelFunction', 'RBF', 'KernelScale', 'auto', ...
'BoxConstraint', C,'Weight',weightTrain );

我使用了 10 倍交叉验证来进行训练,并学习了超参数。因此,在 CV 内,数据集 A 被分为训练集 (trainA) 和验证集 (valA)。训练结束并在 CV 循环之外后,我得到了 A 上的混淆矩阵:

80025 1
0 140

其中第一行代表多数类,第二行代表少数类。只有 1 个误报 (FP),并且所有少数类示例均已正确分类,真阳性 (TP) = 140。

问题:然后,我在一个新的未见过的测试数据集 B 上运行经过训练的模型,该数据集在训练期间从未见过。这是在 B 上进行测试的混淆矩阵。

50075 0
100 0

可以看出,少数类根本没有被分类,因此权重的目的没有达到。虽然没有 FP,但 SVM 无法捕获少数类示例。我没有在 B 上应用任何权重或平衡方法,例如采样(SMOTE、RUSBoost 等)。可能出了什么问题以及如何克服这个问题?

最佳答案

可以设置类错误分类权重而不是样本权重!

您可以根据以下示例设置类别权重。

A 类(n 条记录;主导类)到 B 类(m 条记录;少数类)的错误分类权重可以为 n/m。误分类权重 对于 B 类,A 类可以根据严重程度设置为 1 或 m/n,您希望将其施加到学习中

c=[0 2.2;1 0];
mod=fitcsvm(X,Y,'Cost',c)

根据documentation :

For two-class learning, if you specify a cost matrix, then the software updates the prior probabilities by incorporating the penalties described in the cost matrix. Consequently, the cost matrix resets to the default. For more details on the relationships and algorithmic behavior of BoxConstraint, Cost, Prior, Standardize, and Weights, see Algorithms.

关于matlab - SVM 对于不平衡数据集的性能较差 - 如何改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53752674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com