这篇文档文章解释了如何为分类任务应用多层感知器。我有一个长度为 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
和实值模型输出之间的均方误差y
或简单误差来报告性能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';