转置训练集是否会影响SVM的结果

时间:2015-12-04 18:57:15

标签: matlab matrix classification svm

我正致力于人类年龄的分类,我必须将数据分为两类,即YoungOld。作为一个分类器,我使用的是SVM,这就是我到目前为止所做的数据:

  1. TrainingSet,其大小为(11264,284):其中每列对应observation(一个人)。这意味着我有284人参加培训任务和11264个功能。
  2. TestSet也形成为TrainingSet
  3. Groups(标签)是一个矩阵组(284,1),其中{1}填充({1}},Olds填充(-1)。
  4. 我使用matlab内置函数训练Youngs以获得`SvmStruct'。

    SVM
  5. 然后我使用此SvmStruct = svmtrain(TrainingSet, Groups') 函数介绍TestSet以获得分类结果。

    matlab
  6. 在我审核了关于SvmClassify = svmclassify(SvmStruct, TestSet) 的{​​{1}}帮助后,我推断出必须以matlab的每一行的方式将数据引入SVM分类器对应于SVM(在我的情况下是一个人),每列对应一个特征。所以我到目前为止所做的是转置这些矩阵(TrainingSetObservation)。 我所做的是错的,我得到的所有结果都是错的?

1 个答案:

答案 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).