无法理解 SVM 返回的混淆矩阵

Posted

技术标签:

【中文标题】无法理解 SVM 返回的混淆矩阵【英文标题】:Unable to make sense of the confusion matrix returned by SVM 【发布时间】:2018-11-20 06:10:19 【问题描述】:

我试图了解为什么 SVM 分类器无法正确分类我的数据。我仅在原始数据的 2000 个样本中提供了 10 个样本XX。我无法理解 Matlab 返回的混淆矩阵。我使用了 SVM 分类器。我的代码错了吗,尤其是我做交叉验证的方式?

XX 被规范化为XY 是标签。每个特征向量的长度为 8。

**问题**)有人可以帮忙解决这个问题吗?

             pred 0   pred 1
  actual 0    100       0
  actual 1    100       0

谢谢

【问题讨论】:

【参考方案1】:

你有:

    一个不平衡的数据集(7 个和 3 个样本), 一个 8 维特征空间,只有 7 个和 3 个样本,这远远不足以填充它(参见维度诅咒),并且 您只使用这些样本的一半进行训练,这意味着您离填充特征空间还有更远的距离。

因此,我并不惊讶 SVM 提出的概括是将所有事物归类为“0 类”。

尝试仅使用其中一个功能(XX 的第一列),并使用留一法交叉验证。

【讨论】:

感谢您的回答。我尝试了您的建议,这些是结果(1)我使用了最后 2 个功能(第 7 列和第 8 列),其准确性为 60%,混淆矩阵为`[100, 0;100, 0]`(2)更改了交叉验证通过执行N = numel(Y);part = cvpartition(N,'LeaveOut')离开一个人 但这会引发错误 Error using internal.stats.cvpartitionImpl/training (line 189) Requires two input arguments. Error in cvpartition/training (line 209) ` trainIndices = training(cv.Impl,varargin:);` Error in demo_SVM_Modif (line 41) istrain = training(part); % Data for fitting 我不知道进行 LeaveOut 交叉验证的正确方法。你能帮忙吗?谢谢

以上是关于无法理解 SVM 返回的混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用e1071包中的svm函数构建支持向量机SVM模型(Support vector machines)默认使用RBF核函数使用table函数计算混淆矩阵评估分类模型性能

来自概率的混淆矩阵

R语言使用kernlab包中的ksvm函数构建支持向量机SVM模型(Support vector machines)使用RBF核函数使用table函数计算混淆矩阵评估分类模型性能

混淆矩阵中的错误数据的级别不能多于参考

如何使用 LIBSVM 从混淆矩阵中获得分类精度?

使用 sklearn SVC 计算训练集的混淆矩阵