是否转置训练集影响SVM的结果
Is transposing training set affects the results with SVM
我正在研究人类年龄问题,我必须将数据分为两个 类,即 Young
和 Old
。作为分类器,我正在使用 SVM
,这是我到目前为止为准备数据所做的工作:
TrainingSet
的大小为 (11264, 284) :其中每一列对应一个 observation
(一个人)。这意味着我有 284 个人的训练任务和 11264 个特征。
TestSet
也被格式化为 TrainingSet
。
Groups
(标签)是一个矩阵 Groups(284, 1),其中 Olds
为 (1),Youngs
为 (-1)。
我使用 matlab 内置函数训练 SVM
以获得 `SvmStruct'。
SvmStruct = svmtrain(TrainingSet, Groups')
然后我引入TestSet
使用这个matlab
函数来得到分类结果
SvmClassify = svmclassify(SvmStruct, TestSet)
在查看了 matlab
关于 SVM
的帮助后,我推断数据必须以 [=15] 的每一行的方式引入 SVM
分类器=] 对应一个 Observation
(在我的例子中是一个人),每一列对应一个特征。所以到目前为止我所做的是转置那些矩阵(TrainingSet
和 TestSet
)。
是不是我做错了得到的结果都是错的?
我查看了 svmtrain
的源代码,如果组数与行数不匹配,它会转置训练数据(svmtrain.m
,第 249 行,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
)。
我正在研究人类年龄问题,我必须将数据分为两个 类,即 Young
和 Old
。作为分类器,我正在使用 SVM
,这是我到目前为止为准备数据所做的工作:
TrainingSet
的大小为 (11264, 284) :其中每一列对应一个observation
(一个人)。这意味着我有 284 个人的训练任务和 11264 个特征。TestSet
也被格式化为TrainingSet
。Groups
(标签)是一个矩阵 Groups(284, 1),其中Olds
为 (1),Youngs
为 (-1)。我使用 matlab 内置函数训练
SVM
以获得 `SvmStruct'。SvmStruct = svmtrain(TrainingSet, Groups')
然后我引入
TestSet
使用这个matlab
函数来得到分类结果SvmClassify = svmclassify(SvmStruct, TestSet)
在查看了 matlab
关于 SVM
的帮助后,我推断数据必须以 [=15] 的每一行的方式引入 SVM
分类器=] 对应一个 Observation
(在我的例子中是一个人),每一列对应一个特征。所以到目前为止我所做的是转置那些矩阵(TrainingSet
和 TestSet
)。
是不是我做错了得到的结果都是错的?
我查看了 svmtrain
的源代码,如果组数与行数不匹配,它会转置训练数据(svmtrain.m
,第 249 行,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
)。