【问题标题】:training svm in matlab with multiple data set在 matlab 中使用多个数据集训练 svm
【发布时间】:2019-01-31 20:07:45
【问题描述】:

我有多个数据集,即 x y 数据,每个数据集代表同一个类,我还有其他 2 个类的多个数据集。

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

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    通常,您希望使用您希望网络学习的类来标记您的数据,这样它就可以在训练中检查在“猜测”之后它仍然偏离解决方案的程度,以便它可以优化下一次迭代的权重。

    您还希望将您的数据集拆分为一个训练集,用于学习,以及两个具有不同数据的部分,网络还不“知道”,并将提供一个很好的参考。 这两个是一个验证集,用于在训练期间进行额外的验证,另一个是一个测试集,用于在训练后测试准确性。

    可以这样进行:

    1. 在 4D 矩阵 A 中累积训练数据,其中第一个二维是您的 xy 的值,第三个维度是 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)
      

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

    一切顺利, 西蒙

    【讨论】:

    • 谢谢,我有点困惑我实际上有 150 个带有 xy 数据的文本文件,表示第 1 类,还有 68 个带有 xy 数据的文本文件,表示第 2 类,最后有 55 个带有 xy 数据的文本文件表示第 3 类。我是否需要合并数据?
    • 合并数据只是为了在洗牌时不会失去 X 和 Y 文件的关系。您是否已经标记了您的数据集,或者它只是原始数据?如果第二个是真的,请按照我发布的指南进行操作
    • 在任何情况下,您都必须合并您的数据,因此您的训练、验证和测试集中都有代表所有三个类。
    • A = horzconcat(x,y) 你有理由为你的解决方案这样做吗?
    • 我用 horzcat 从你的三个类中制作了一个大矩阵。这使您可以在标记整个训练集后对其进行打乱,为每个矩阵保留相应的标签,并在创建训练、验证和测试集时为每个类提供训练数据
    猜你喜欢
    • 2012-02-21
    • 2015-08-14
    • 2014-02-21
    • 2014-05-18
    • 2016-06-09
    • 2015-05-04
    • 2019-07-12
    • 2015-01-07
    • 2013-12-16
    相关资源
    最近更新 更多