在Matlab中使用多个数据集训练svm

时间:2018-08-25 17:45:07

标签: matlab

我有多个数据集,它们是x y个数据,每个数据集代表同一类,另外我也有其他2个类的多个数据集。

我需要对合并的y数据进行训练还是需要为每个数据集调用训练函数,请注意每个数据集是同一类?每个类类型都有多个数据集。

我对第1类有150 x y的数据集,对第2类有约68的数据集,对于第3类有55的数据集。我如何在matlab中训练支持向量机(SVM)?

1 个答案:

答案 0 :(得分:1)

据我了解您的项目,您想在包含3个不同类的数据集上训练分类器。

通常,您希望使用您的网络希望学习的类来标记数据,因此它可以签入训练,在“猜测”之后仍偏离解决方案多少,以便为下一次迭代优化权重。

您还希望将数据集划分为一个训练集,该训练集将用于学习,并且有2个部分具有不同的数据,网络尚未“知道”,将提供很好的参考。 这两个是一个验证集,用于在训练过程中进行其他验证;一个测试集,用于在训练后测试准确性。

可以这样进行:

  1. 将训练数据累积在4D矩阵A中,其中前2维是xy的值,而第3维是的索引。 XY矩阵。您可以使用A = horzconcat(x,y)

  2. 使用第4维来根据您的类标记数据。在您的情况下,在前150个元素中写1,在随后的68中写2,在后55个中写3

  3. 随机播放标记的数据集。您可以使用randperm创建随机索引,然后遍历集合

  4. 将您的数据集分为训练,验证和测试部分。 (通常60%,20%,20%是合理的)

  5. 将这些集合分别分成包含训练数据的3D X矩阵和包含每个训练数据的解的Y向量。

  6. 在您的训练选项中,指定带有验证部分的验证数据,例如:

    training_options =  trainingOptions ...
                        ('sgdm', ...
                        'Verbose', 1 ,...
                        'VerboseFrequency' , 20, ...
                        'MaxEpochs', 30, ...
                        'MiniBatchSize', 128, ...
                        'Shuffle', 'every-epoch', ...
                        **'ValidationData', {X_validate, categorical(Y_validate)},...**
                        'ValidationFrequency', 20, ...
                        'ValidationPatience', 5, ...
                        'InitialLearnRate', 0.001, ...
                        'L2Regularization', 0, ...
                        'Momentum', 0, ...
                        'ExecutionEnvironment', 'cpu', ...
                        'Plots','training-progress');
    
  7. 使用

    训练神经网络Matlab对象
    [nn, nn_info] = trainNetwork(X_train, categorical(Y_train), ...
                  layers, training_options);
    
  8. 获取受训网络的准确性:

    acurracy = sum(Y_test_predictions == categorical(Y_test) )/ ...
           size(Y_test, 1)
    

我将此方法应用于卷积网络,效果很好。 希望这会有所帮助,

最好, 西蒙