无法理解 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
被规范化为X
,Y
是标签。每个特征向量的长度为 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函数计算混淆矩阵评估分类模型性能