我正致力于人类年龄的分类,我必须将数据分为两类,即Young
和Old
。作为一个分类器,我使用的是SVM
,这就是我到目前为止所做的数据:
TrainingSet
,其大小为(11264,284):其中每列对应observation
(一个人)。这意味着我有284人参加培训任务和11264个功能。TestSet
也形成为TrainingSet
。Groups
(标签)是一个矩阵组(284,1),其中{1}填充({1}},Olds
填充(-1)。我使用matlab内置函数训练Youngs
以获得`SvmStruct'。
SVM
然后我使用此SvmStruct = svmtrain(TrainingSet, Groups')
函数介绍TestSet
以获得分类结果。
matlab
在我审核了关于SvmClassify = svmclassify(SvmStruct, TestSet)
的{{1}}帮助后,我推断出必须以matlab
的每一行的方式将数据引入SVM
分类器对应于SVM
(在我的情况下是一个人),每列对应一个特征。所以我到目前为止所做的是转置这些矩阵(TrainingSet
和Observation
)。
我所做的是错的,我得到的所有结果都是错的?
答案 0 :(得分:3)
I looked at the source code for svmtrain
, and it transposes the training data if the number of groups does not match the number of rows (svmtrain.m
, line 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
So no, your training results are not wrong.
However, svmclassify
does not transpose the test data, it only checks for the right number of features (svmclassify.m
, line 63 ff.):
if size(sample,2)~=size(svmStruct.SupportVectors,2)
error(message('stats:svmclassify:TestSizeMismatch'));
end
So this should have triggered an error (sample
is your TestSet
).