请考虑数据集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等)。有什么问题以及如何解决这个问题?
答案 0 :(得分:1)
可以设置类别错误分类权重,而不是样本权重!
您可以根据以下示例设置班级权重。
将A类(n个记录;显性)分类为B类(m个记录;少数类)的错误分类权重可以为n / m。 错误分类权重对于B级,您可以根据学习的严重程度将A级设置为1或m / n
c=[0 2.2;1 0];
mod=fitcsvm(X,Y,'Cost',c)
对于两类学习,如果您指定成本矩阵,则 该软件通过合并以下内容来更新先验概率 成本矩阵中所述的罚款。因此,成本矩阵 重置为默认值。有关关系的更多详细信息和 BoxConstraint,费用,优先级,标准化和 权重,请参阅算法。
答案 1 :(得分:1)
Area Under Curve (AUC)通常用于衡量应用于不平衡数据的模型的性能。绘制ROC曲线以从视觉上获得更多见解也很好。仅将混淆矩阵用于此类模型可能会导致误解。
统计和机器学习工具箱中的 perfcurve
提供了两种功能。