У меня есть набор данных из 43 примеров (точек данных) и 70 000 функций, что означает, что моя матрица набора данных (43 x 70'000). Этикетки содержат 4 разных значения (1-4), т. Е. Существует 4 класса.Почему плохая точность с нейронной сетью?
Теперь, я сделал классификацию с сетью глубоких убеждений/нейронной сетью, но я получаю только точность около 25% (случайный уровень) с перекрестной проверкой «один-одинекторный». Если я использую kNN, SVM и т. Д., Я получаю точность> 80%.
Я использовал DeepLearnToolbox для Matlab (https://github.com/rasmusbergpalm/DeepLearnToolbox) и только что адаптировал пример Deep Belief Network из readme панели инструментов. Я пробовал различное количество скрытых слоев (1-3) и различное количество скрытых узлов (100, 500, ...), а также различные скорости обучения, импульс и т. Д., Но точность по-прежнему очень плохая. Векторы признаков масштабируются до диапазона [0,1], потому что это необходимо для панели инструментов.
В деталях я сделал следующий код (только показывающий один прогон перекрестной проверки):
% Indices of training and test set
train = training(c,m);
test = ~train;
% Train DBN
opts = [];
dbn = [];
dbn.sizes = [500 500 500];
opts.numepochs = 50;
opts.batchsize = 1;
opts.momentum = 0.001;
opts.alpha = 0.15;
dbn = dbnsetup(dbn, feature_vectors_std(train,:), opts);
dbn = dbntrain(dbn, feature_vectors_std(train,:), opts);
%unfold dbn to nn
nn = dbnunfoldtonn(dbn, 4);
nn.activation_function = 'sigm';
nn.learningRate = 0.15;
nn.momentum = 0.001;
%train nn
opts.numepochs = 50;
opts.batchsize = 1;
train_labels = labels(train);
nClass = length(unique(train_labels));
L = zeros(length(train_labels),nClass);
for i = 1:nClass
L(train_labels == i,i) = 1;
end
nn = nntrain(nn, feature_vectors_std(train,:), L, opts);
class = nnpredict(nn, feature_vectors_std(test,:));
feature_vectors_std матрица (43 х 70'000) со значениями масштабированных на [0,1] ,
Может ли кто-нибудь понять, почему я получаю такую плохую точность?