为什么使用单个隐藏节点的 IRIS 数据集可以获得良好的准确性?

Why do I get good accuracy with IRIS dataset with a single hidden node?

我有一个带有反向传播训练器的神经网络的最小示例,在 IRIS 数据集上对其进行了测试。我从 7 个隐藏节点开始,效果很好。

我将隐藏层的节点数降低到 1(预计它会失败),但惊讶地发现准确率上升了。

我在 azure ml 中设置了实验,只是为了验证它不是我的代码。同样的事情,单个隐藏节点的准确率为 98.3333%。

谁能给我解释一下这是怎么回事?

首先,各种 classification 模型在 Iris 上产生了令人难以置信的好结果(Iris 非常可预测);例如,参见 here

其次,我们可以观察到鸢尾花数据集中的特征相对较少。此外,如果您查看 dataset description,您会发现其中两个特征与 class 结果高度相关。

这些相关值是线性的、单一特征的相关性,这表明人们很可能应用线性模型并观察到良好的结果。神经网络是高度非线性的;随着隐藏节点和隐藏层数量的增加,它们变得越来越复杂,并捕获越来越多的非线性特征组合。

考虑到这些事实,(a) 开始的特征很少,并且 (b) 与 class 有很高的线性相关性,都指向一个不太复杂的线性函数,如作为合适的预测模型——通过使用单个隐藏节点,您几乎可以使用线性模型。

还可以注意到,在没有任何隐藏层(即只有输入和输出节点)的情况下,当使用逻辑传递函数时,这相当于逻辑回归。

只需添加到 DMlash 的非常好的答案:Iris 数据集甚至可以通过仅对一个属性使用三个简单规则以非常高的准确度 (96%) 进行预测:

If Petal.Width = (0.0976,0.791] then Species = setosa
If Petal.Width = (0.791,1.63]   then Species = versicolor
If Petal.Width = (1.63,2.5]     then Species = virginica

一般来说,神经网络是黑盒子,你永远不知道它们在学习什么,但在这种情况下,反向工程应该很容易。可想而知,它学到了类似上面的东西。

以上规则是使用OneR package找到的。