多层感知器,在 Python 中可视化决策边界 (2D)

Posted

技术标签:

【中文标题】多层感知器,在 Python 中可视化决策边界 (2D)【英文标题】:Multilayer-perceptron, visualizing decision boundaries (2D) in Python 【发布时间】:2015-12-31 11:54:35 【问题描述】:

我为二元分类编写了多层感知。据我了解,一个隐藏层可以仅使用线作为决策边界(每个隐藏神经元一条线)来表示。这很有效,并且可以很容易地在训练后使用得到的权重来绘制。

但是,随着更多层的添加,我不确定要使用哪种方法,而且教科书中很少处理可视化部分。我想知道,是否有一种直接的方法可以将权重矩阵从不同层转换到这个非线性决策边界(假设 2D 输入)?

非常感谢,

【问题讨论】:

据我了解,感知器不只适用于线性函数吗? 是的,在原始意义上,但是多层版本导致非线性函数。 感谢您的解释。我没有在多人游戏中使用它 【参考方案1】:

绘制决策边界的一种方法(无论是用于线性分类器还是非线性分类器)是在一个统一的网格中采样点并将它们提供给分类器。假设X 是您的数据,您可以创建一个统一的点网格,如下所示:

h = .02  # step size in the mesh
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))

然后,您将这些坐标提供给您的感知器以捕获它们的预测:

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

假设clf 是您的感知器,np.c_ 从均匀采样的点创建特征,将它们提供给分类器并在Z 中捕获它们的预测。

最后,将决策边界绘制为等高线图(使用 matplotlib):

Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

还可以选择绘制您的数据点:

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)

Fully working example,该示例的功劳归于scikit-learn(顺便说一句,这是一个很棒的机器学习库,实现了完全工作的感知器)。

【讨论】:

谢谢,解释得很好。 只是另一个问题,因为它是我编写的第一个 NN。在您的示例中,模式是否是输入矩阵 (X) 中的行向量? @johnblund 我不能 100% 确定 NN 是否采用不同的方式(因为我不与他们合作),但一般来说,对于机器学习来说,惯例是接受培训X = [n_samples x n_features] 矩阵中的数据和矩阵y = [n_samples x 1]y = [n_samples x n_classes] 中的基本事实(对于NN,它将是y = [n_samples x n_outputs]n_outputs 最后一层的输出,通常对应于n_classes)。

以上是关于多层感知器,在 Python 中可视化决策边界 (2D)的主要内容,如果未能解决你的问题,请参考以下文章

多层感知器 - 找到“分离”曲线

分散数据并在python中绘制决策边界

在决策树中查找到决策边界的距离

halcon多层感知器MLP的使用

如何在多层感知器中使用 sigmoid 函数?

神经网络——Python实现BP神经网络算法(理论+例子+程序)