【发布时间】:2020-03-19 17:56:47
【问题描述】:
This documentation article 解释了如何将多层感知器应用于分类任务。我有一个长度为 80 的输入特征向量,想训练一个多层感知器将输入向量分为两类——0 和 1。我的输出层包含 1 个节点。
问题 1) 我希望分类器有二进制输出,但模型输出的是实数值(在0 和1 之间)。为什么会发生这种情况以及如何将其转换为二进制类?教程链接中没有提到如何获取二进制值标签,即在最后一层使用什么函数。
为了澄清,一旦模型输出被计算出来(下面是前 4 个输出值),
y =
0.1042
0.9961
0.9956
0.0049
我可以使用像bin_target = y>=0.5 这样的简单阈值函数,其中所有大于或等于 0.5 的数字都标记为 1,其余数字标记为 0。但是,手动选择阈值对我来说似乎是任意的。
问题2) MSE的计算:在已知的二进制值目标Y和实值模型的输出@987654327之间计算均方误差还是简单的误差来报告性能@ 或 perfClassify = y_bin - Y?
下面的代码是我对inputs的数据进行分类的尝试。
% Create a Pattern Recognition Network
hiddenLayerSize = 10;
net = init(net);
net.performFcn = 'crossentropy';
net = patternnet(hiddenLayerSize);
% Train the Network
[net,tr] = train(net,inputs,Y); % Y=targets
% Test the Network
y = net(inputs);
bin_target = y>=0.5;
error1 = bin_target-Y';
% OR
error2 = y - Y';
【问题讨论】:
-
请尝试重新表述您的问题以更清楚地解释 3 件事:预期结果是什么,目前正在发生什么,以及 您如何尝试修复它。请专注于使您的问题独立,即 - 在帖子正文中包含所有必需的信息,以便无需点击链接即可回答。该链接有利于上下文,但也许链接到该页面中的特定数字会更有助于解释您的问题。
标签: matlab neural-network classification pattern-recognition mlp