我正在研究人类年龄分类,我必须将数据分为两类,即 Young
和Old
。作为分类器,我使用 SVM
这就是我到目前为止所做的准备数据的操作:
TrainingSet
它的大小是 (11264, 284) :其中每列对应于observation
(一个人)。这意味着我有 284 个人用于训练任务和 11264 个特征。TestSet
格式也为TrainingSet
.Groups
(labels) 是一个矩阵 Groups(284, 1),其中Olds
用 (1) 填充和 (-1) 为Youngs
.我训练过
SVM
使用matlab内置函数获得`SvmStruct'。SvmStruct = svmtrain(TrainingSet, Groups')
然后我介绍
TestSet
使用这个matlab
函数以获得分类结果。SvmClassify = svmclassify(SvmStruct, TestSet)
在我查看了matlab
之后帮助SVM
我推断数据必须引入SVM
分类器的方式是 TrainingSet
的每一行对应于Observation
(在我的例子中是一个人),每一列对应一个特征。所以到目前为止我所做的是转置这些矩阵( TrainingSet
和 TestSet
)。
难道是我做错了,得到的结果都是错的吗?
最佳答案
我查看了 svmtrain
的源代码,如果组数与行数不匹配,它会转置训练数据(svmtrain.m
,行249 ff,MATLAB 2015b):
% make sure data is the right size
if size(training,1) ~= size(groupIndex,1)
if size(training,2) == size(groupIndex,1)
training = training';
else
error(message('stats:svmtrain:DataGroupSizeMismatch'))
end
end
所以不,你的训练结果没有错。
但是,svmclassify
不会转置测试数据,它仅检查正确数量的特征(svmclassify.m
,第 63 行以下):
if size(sample,2)~=size(svmStruct.SupportVectors,2)
error(message('stats:svmclassify:TestSizeMismatch'));
end
所以这应该会触发错误(sample
是您的TestSet
)。
关于matlab - 转置训练集是否会影响 SVM 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34095541/