哪种激活或传递函数适合对 3 类数据进行分类?

Posted

技术标签:

【中文标题】哪种激活或传递函数适合对 3 类数据进行分类?【英文标题】:Which activation or transfer function is suitable to classify 3 type of data? 【发布时间】:2018-06-24 14:32:36 【问题描述】:

我正在尝试训练 MLP 使用 ABC 对鸢尾花数据集进行分类。从 ABC 的代码中,我得到了最佳权重和偏差,我将它们输入到测试代码中,它给了我 5 个正确分类和 10 个错误我认为我的代码中的错误是在训练过程中哪个激活或传递函数适合分类 3数据类型?

我通过这个得到输出

trin= [4.7 3.2 1.6 0.2;
 4.8 3.1 1.6 0.2;
 5.4 3.4 1.5 0.4;
 5.2 4.1 1.5 0.1;
 5.5 4.2 1.4 0.2;
 5.7 2.6 3.5 1;
 5.5 2.4 3.8 1.1;
 5.5 2.4 3.7 1;
 5.8 2.7 3.9 1.2;
 6 2.7 5.1 1.6;
 6.7 3.3 5.7 2.1;
 7.2 3.2 6 1.8;
 6.2 2.8 4.8 1.8;
 6.1 3 4.9 1.8;
 6.4 2.8 5.6 2.1
 ];
 trout=[-1;-1;-1;-1;-1;
   0;0;0;0;0;
   1;1;1;1;1];
 inp=size(trin,2);
 out=size(trout,2);
 hidden=2;


 x=[[1,1.970,-2,4,1,-3.450,5,-5,-2.650,3.300,4,-2,-1.920]];
iw = reshape(x(1:hidden*inp),hidden,inp);
b1 = reshape(x(hidden*inp+1:hidden*inp+hidden),hidden,1);
lw =           
 reshape(x(hidden*inp+hidden+1:hidden*inp+hidden+hidden*out),out,hidden);


 b2=reshape(x
 (hidden*inp+hidden+hidden*out+1:hidden*inp+hidden+hidden*out+out)
 ,out,1);

y = tanh(tanh(trin*iw'+repmat(b1',size(trin,1),1))*lw'+
repmat(b2',size(trin,1),1));
e = gsubtract(trout,y);

tind = vec2ind(trout);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);

x vextor 是我从 ABC 优化算法得到的权重和偏差

【问题讨论】:

【参考方案1】:

您无法真正使用 tanh 输出执行多类分类。为此使用了 softmax 激活,其中输出是一个包含三个元素的向量,对应于每个类的概率。

【讨论】:

no 输出只是一个值,1 或 0 或 -1 引用每个类,例如,如果输入是 [[4.7 3.2 1.6 0.2] 输出应该是 -1,因为我标准化了我的数据集并且在隐藏层只使用 2 个神经元,在输出层只使用 1 个神经元 @samsam 这仍然不是常见的用法,我的回答仍然适用。 Softmax 通常更胜一筹。 @samsam 编辑您的原始问题,但我不确定您还期待什么。 我使用近似相同的代码对其他 135 个样本进行训练 我更新了训练代码中的一些内容,并在测试中得到以下输出 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -0.0179 0.0183 0.0010 -0.0001 0.9986 0.9954 0.9952 0.9165 0.9165 0.9986 0.9954 0.9952 0.9165 0.9169 3.69 1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 我可以认为这是一个好结果吗???

以上是关于哪种激活或传递函数适合对 3 类数据进行分类?的主要内容,如果未能解决你的问题,请参考以下文章

哪种机器学习算法更适合这种情况

哪种算法以及哪种超参数组合最适合对这些数据进行聚类?

bilstm默认激活函数

EasyDL的哪种算法更适合你的图像分类应用

交易数据的数据挖掘分类——哪种算法最适合?

故事板 Segue 与委派。哪种方法更适合在 ViewController 之间传递数据