我有多个数据集,它们是x y个数据,每个数据集代表同一类,另外我也有其他2个类的多个数据集。
我需要对合并的y数据进行训练还是需要为每个数据集调用训练函数,请注意每个数据集是同一类?每个类类型都有多个数据集。
我对第1类有150 x y的数据集,对第2类有约68的数据集,对于第3类有55的数据集。我如何在matlab中训练支持向量机(SVM)?
答案 0 :(得分:1)
据我了解您的项目,您想在包含3个不同类的数据集上训练分类器。
通常,您希望使用您的网络希望学习的类来标记数据,因此它可以签入训练,在“猜测”之后仍偏离解决方案多少,以便为下一次迭代优化权重。
您还希望将数据集划分为一个训练集,该训练集将用于学习,并且有2个部分具有不同的数据,网络尚未“知道”,将提供很好的参考。 这两个是一个验证集,用于在训练过程中进行其他验证;一个测试集,用于在训练后测试准确性。
可以这样进行:
将训练数据累积在4D矩阵A
中,其中前2维是x
和y
的值,而第3维是的索引。 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)
我将此方法应用于卷积网络,效果很好。 希望这会有所帮助,
最好, 西蒙