对于我正在使用的 svm 训练和预测vl_svmtrain
,可以在此处找到其文档:http ://www.vlfeat.org/matlab/vl_svmtrain.html
[WB] = VL_SVMTRAIN(X, Y, LAMBDA) 从数据向量 X 和标签 Y 训练一个线性支持向量机 (SVM)。X 是一个 D×N 矩阵,每个示例一列和 D 个特征维度(SINGLE或双)。Y 是具有 N 个元素的 DOUBLE 向量,每个训练点带有二进制(-1 或 +1)标签。
根据文档,数据X
必须在 D × N 矩阵中,每列一个样本。
问题是我的数据根本没有以这种方式排列,即使我愿意,我也不认为我可以这样排列。我的每个图像都由一个 size 的特征矩阵表示512 * 257
,它们存储在一个单元格中。同样,每个测试图像也具有相同的大小。
因此,为了简化起见,我假设我只有 3 个类,每个类都由一个大小模型表示,512 * 257
并且我有数千个测试,我必须与每个模型进行比较,更像是一个对所有的方法。但它是我遇到困难的数据安排。
是否可以将数据以单元格格式而不是矩阵格式呈现给 SVM?
更新:
我提到的单元阵列由 28 个模型组成。所以我一共有 28 个类,每个类都由一个 size 数组表示512 * 257
。写models(1)
礼物ans = [512x257 double]
和写作models{1}
会产生512*257
双重矩阵。
这就是我用来训练 SVM 的方法,同样,每个测试的大小也相同,并且排列方式相同。
我如何为每个模型得到这个矩阵?我从每个类/模型的 100 个图像中提取了 RootSIFT 特征。然后我将这些特征呈现给一个高斯混合模型脚本,并将集群的数量设置为 512。这给了我 512 个集群的均值、协方差和权重。然后我将它们连接起来使用models{i} = [gmm_models{i}.w(:) gmm_models{i}.mu' gmm_models{i}.sigma'];
测试方面,从 5 张图像中提取 RootSIFT 特征,然后对它们进行与模型相同的处理,得到相同大小的级联矩阵。所以很自然地,每个模型都有数百个测试矩阵。
我希望这比以前更清楚了。