gpt4 book ai didi

matlab - 为什么神经网络的准确性不好?

转载 作者:行者123 更新时间:2023-11-30 09:29:44 24 4
gpt4 key购买 nike

我有一个包含 43 个示例(数据点)和 70'000 个特征的数据集,这意味着我的数据集矩阵为 (43 x 70'000)。标签包含 4 个不同的值 (1-4),即有 4 个类别。

现在,我已经使用深度置信网络/神经网络进行了分类,但通过留一法交叉验证,我仅获得了 25% 左右的准确率(机会水平)。如果我使用 kNN、SVM 等,我将获得 >80% 的准确率。

我使用了用于 Matlab 的 DeepLearnToolbox ( https://github.com/rasmusbergpalm/DeepLearnToolbox ),并且刚刚改编了工具箱自述文件中的深度置信网络示例。我尝试了不同数量的隐藏层(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 x 70'000) 矩阵,其值缩放至 [0,1]。

有人能推断出为什么我的准确性这么差吗?

最佳答案

因为你的特征比数据集中的示例多得多。换句话说:你有大量的权重,你需要估计所有的权重,但你不能,因为具有如此巨大结构的神经网络无法在如此小的数据集上很好地泛化,你需要更多的数据来学习如此大量的权重隐藏权重(事实上,神经网络可能会记住你的训练集,但无法推断出它是测试集的“知识”)。同时,SVM 和 kNN 等简单方法的 80% 准确率表明您可以使用更简单的规则来描述数据,因为例如 SVM 将只有 70k 权重(而不是 70kfirst_layer_size + first_layer_size Second_layer_size + ...在NN中),kNN根本不会使用权重。

复杂模型不是 Elixir ,您尝试拟合的模型越复杂 - 您需要的数据就越多。

关于matlab - 为什么神经网络的准确性不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com