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

标签 matlab matrix classification svm

我正在研究人类年龄分类,我必须将数据分为两类,即 YoungOld 。作为分类器,我使用 SVM这就是我到目前为止所做的准备数据的操作:

  1. TrainingSet它的大小是 (11264, 284) :其中每列对应于 observation (一个人)。这意味着我有 284 个人用于训练任务和 11264 个特征。
  2. TestSet格式也为 TrainingSet .
  3. Groups (labels) 是一个矩阵 Groups(284, 1),其中 Olds 用 (1) 填充和 (-1) 为 Youngs .
  4. 我训练过SVM使用matlab内置函数获得`SvmStruct'。

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

    SvmClassify = svmclassify(SvmStruct, TestSet)
    

在我查看了matlab之后帮助SVM我推断数据必须引入SVM分类器的方式是 TrainingSet 的每一行对应于Observation (在我的例子中是一个人),每一列对应一个特征。所以到目前为止我所做的是转置这些矩阵( TrainingSetTestSet )。 难道是我做错了,得到的结果都是错的吗?

最佳答案

我查看了 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/

相关文章:

algorithm - 稀疏矩阵的最小表示

matlab - MATLAB 是否在清除后保留一些变量?

c++ - 需要一个matlab表达式的解释

python - 在 Numpy 中为值对生成矩阵

machine-learning - 根据两个参数预测值

machine-learning - 字母语音识别的最佳音频分类算法?

python - 带权重的 Scikit-Learn 分类和回归

algorithm - 对一组特征向量进行采样以获得每个特征的 "uniform"直方图

file - 在 MATLAB 中以原子方式创建文件锁(文件互斥锁)

用于任意元素类型的 Haskell 线性代数矩阵库