matlab - 在 matlab 中使用多个数据集训练 svm
问题描述
我有多个数据集,它们是 xy 数据,每个数据集代表同一个类,我也有其他 2 个类的多个数据集。
我需要对合并的 xy 数据进行训练,还是需要为每个数据集调用训练函数,注意每个数据集是同一类?每个类类型都有多个数据集。
第 1 类有 150 个 xy 数据集,第 2 类有 68 个,第 3 类有 55 个。如何在 matlab 中训练支持向量机(SVM)?
解决方案
据我了解您的项目,您想在包含 3 个不同类的数据集上训练分类器。
通常,您希望使用您希望网络学习的类来标记您的数据,以便它可以在训练中检查它在“猜测”之后仍然偏离解决方案的程度,以便它可以优化下一次迭代的权重。
您还想将您的数据集拆分为一个训练集,用于学习,以及两个具有不同数据的部分,网络还不“知道”,并将提供一个很好的参考。这两个是一个验证集,用于在训练期间进行额外验证,另一个是测试集,用于在训练后测试准确性。
可以这样进行:
在 4D Matrix 中累积训练数据
A
,其中第一个二维将是您的值,x
第三y
个维度将是 XY 矩阵的索引。您可以使用A = horzconcat(x,y)
使用第 4 个维度根据您的班级标记您的数据。在您的情况下,在前 150 个元素中写 1,在后面的 68 中写 2,在最后 55 中写 3
打乱您的标记数据集。您可以使用
randperm
创建一个随机索引,然后遍历集合将您的数据集拆分为训练、验证和测试部分。(通常60%、20%、20%是合理的)
将这些集合分别拆分为一个包含训练数据的 3D X 矩阵和一个包含每个训练数据的解的 Y 向量。
在您的训练选项中,使用您的验证部分指定您的验证数据,例如:
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');
训练你的神经网络 Matlab 对象
[nn, nn_info] = trainNetwork(X_train, categorical(Y_train), ... layers, training_options);
检索训练网络的准确性:
acurracy = sum(Y_test_predictions == categorical(Y_test) )/ ... size(Y_test, 1)
我将这种方法应用于卷积网络,效果很好。希望这可以帮助,
一切顺利,西蒙
推荐阅读
- c++ - 将节点设置为新节点()时的内存泄漏
- django - Django:比较模板中的字符串的问题
- twitter-bootstrap - 如何使列仅在某个断点上拉伸?
- c - 向量中的 * 是什么?
- r - 如何在 r-plotly 中为折线图的峰值动态添加注释?
- perl - 在 Perl 中打印多个 HTTP 标头
- reactjs - POST 错误 400“必须定义啤酒名称”
- winapi - 如何从虚拟服务帐户访问系统私钥?
- django - 调试 Django 自定义命令的可行 VS Code 配置是什么?
- javascript - 使用 javascript 运行函数时遇到“typeerror math.random is not a function”。请指教