news 2026/6/5 9:25:13

基于 Python 进行二维空间线性可分数据单/多层感知器实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Python 进行二维空间线性可分数据单/多层感知器实战

目录

一、前言

二、什么是二维空间线性可分数据

三、感知器的数学模型

四、构造二维分类数据集

五、数据可视化

六、训练单层感知器

七、使用感知器进行预测

八、计算分类准确率

九、绘制决策边界

十、单层感知器的局限性

十一、多层感知器(MLP)

十二、训练多层感知器

十三、评估MLP模型

十四、可视化MLP决策区域

十五、单层感知器与MLP对比

十六、完整项目结构

十七、实战扩展

十八、面试高频问题

什么是线性可分数据?

感知器能解决什么问题?

为什么感知器无法解决XOR?

多层感知器相比感知器优势是什么?

MLP中的隐藏层作用是什么?

Perceptron与MLP本质区别?

十九、总结


在上一篇文章中,我们学习了:

感知器(Perceptron) 单层神经网络 多层神经网络 梯度下降 反向传播

但是很多同学学习完理论后都会产生疑问:

感知器到底长什么样? 如何训练一个感知器? 单层感知器和多层感知器有什么区别? 为什么说单层感知器只能解决线性可分问题?

本文将通过:

Python Numpy Matplotlib Scikit-Learn

构建二维空间数据集,并分别使用:

单层感知器 多层感知器(MLP)

完成分类任务。

通过可视化决策边界,真正理解感知器的工作原理。


二、什么是二维空间线性可分数据

所谓线性可分(Linearly Separable):

存在一条直线 能够把两类数据完全分开

例如:

x1x2类别
120
210
561
651

图形表现:

如果存在:

一条直线 Ax + By + C = 0

能够将两类样本完全隔开。

那么该数据集就是:

线性可分数据

三、感知器的数学模型

单个感知器结构:

计算过程:

z = w1*x1 + w2*x2 + b

然后经过激活函数:

if z > 0: 输出1 else: 输出0

其中:

w 权重 b 偏置

训练过程实际上就是:

不断调整权重和偏置

使分类准确率越来越高。


四、构造二维分类数据集

使用 Sklearn 生成样本。

代码:

from sklearn.datasets import make_classification X, y = make_classification( n_samples=200, n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=1, class_sep=2, random_state=42 ) print(X.shape)

输出:

(200, 2)

表示:

200个样本 2个特征

五、数据可视化

绘制二维散点图:

import matplotlib.pyplot as plt plt.scatter( X[:,0], X[:,1], c=y, cmap='coolwarm' ) plt.xlabel("x1") plt.ylabel("x2") plt.show()

结果:

红色点 蓝色点

明显能够被一条直线分开。

这正是:

线性可分数据

六、训练单层感知器

Sklearn提供:

Perceptron

实现。

代码:

from sklearn.linear_model import Perceptron model = Perceptron( max_iter=1000, random_state=42 ) model.fit(X, y)

训练完成后:

print(model.coef_) print(model.intercept_)

输出:

权重 偏置

即感知器学到的参数。


七、使用感知器进行预测

预测新样本:

sample = [[3,4]] result = model.predict(sample) print(result)

输出:

[1]

说明:

属于类别1

八、计算分类准确率

代码:

from sklearn.metrics import accuracy_score y_pred = model.predict(X) acc = accuracy_score( y, y_pred ) print(acc)

输出:

0.98

说明:

准确率达到98%

对于线性可分数据。

单层感知器效果非常好。


九、绘制决策边界

最重要的一步。

观察感知器到底学到了什么。

代码:

import numpy as np w = model.coef_[0] b = model.intercept_[0] x_line = np.linspace( X[:,0].min(), X[:,0].max(), 100 ) y_line = -(w[0]*x_line+b)/w[1] plt.scatter( X[:,0], X[:,1], c=y, cmap='coolwarm' ) plt.plot( x_line, y_line, color='black' ) plt.show()

效果:

一条直线 将两类样本分开

这就是:

感知器学习到的决策边界

十、单层感知器的局限性

感知器有一个著名缺陷:

只能解决线性可分问题

例如:

XOR问题

数据:

x1x2输出
000
011
101
110

图形:

flowchart LR A[(0,0)] B[(1,1)] C[(0,1)] D[(1,0)]

此时:

不存在一条直线 能够完成分类

因此:

单层感知器失败

十一、多层感知器(MLP)

为了解决非线性问题。

研究人员引入:

隐藏层

结构:

这就是:

MLP Multi Layer Perceptron

十二、训练多层感知器

代码:

from sklearn.neural_network import MLPClassifier mlp = MLPClassifier( hidden_layer_sizes=(10,), max_iter=3000, random_state=42 ) mlp.fit(X, y)

参数说明:

10 隐藏层神经元数量

训练完成:

print("训练完成")

十三、评估MLP模型

代码:

y_pred = mlp.predict(X) acc = accuracy_score( y, y_pred ) print(acc)

输出:

0.99+

对于简单数据集。

MLP通常能够达到更高精度。


十四、可视化MLP决策区域

创建网格:

xx, yy = np.meshgrid( np.linspace(X[:,0].min()-1, X[:,0].max()+1, 200), np.linspace(X[:,1].min()-1, X[:,1].max()+1, 200) )

预测:

Z = mlp.predict( np.c_[xx.ravel(),yy.ravel()] ) Z = Z.reshape(xx.shape)

绘制:

plt.contourf( xx, yy, Z, alpha=0.3 ) plt.scatter( X[:,0], X[:,1], c=y ) plt.show()

观察:

MLP形成复杂决策区域

而不仅仅是一条直线。


十五、单层感知器与MLP对比

对比项单层感知器MLP
隐藏层
表达能力
XOR问题不支持支持
非线性分类不支持支持
训练速度较慢
应用场景简单分类深度学习基础

十六、完整项目结构

project │ ├── data.py ├── train_perceptron.py ├── train_mlp.py ├── visualize.py └── requirements.txt

requirements:

numpy matplotlib scikit-learn

安装:

pip install numpy matplotlib scikit-learn

十七、实战扩展

可以进一步尝试:

增加样本数量 增加噪声 增加隐藏层 调整学习率 调整神经元数量

例如:

MLPClassifier( hidden_layer_sizes=(32,16,8) )

形成:

三层隐藏层神经网络

更加接近真实深度学习模型。


十八、面试高频问题

什么是线性可分数据?

存在一条直线 能够分开两类样本

感知器能解决什么问题?

线性分类问题

为什么感知器无法解决XOR?

XOR不是线性可分数据

多层感知器相比感知器优势是什么?

具备非线性表达能力

MLP中的隐藏层作用是什么?

提取特征 学习复杂关系

Perceptron与MLP本质区别?

是否存在隐藏层

十九、总结

通过本次实战,我们完成了:

二维空间数据生成 单层感知器训练 分类预测 决策边界可视化 多层感知器训练 MLP分类实践

并理解了:

单层感知器 只能学习线性边界

而:

多层感知器 能够学习复杂非线性边界

整个神经网络的发展路线实际上就是:

感知器 ↓ 多层感知器 ↓ 深度神经网络 ↓ CNN/RNN ↓ Transformer ↓ GPT

可以说:

感知器是神经网络的起点,而多层感知器则打开了深度学习的大门。通过亲手实现二维空间分类任务,不仅能够理解模型原理,更能够真正体会“机器如何学习”的过程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 9:23:14

Android端AES文件加解密完整工程(含UI界面、JNI支持与构建配置)

本文还有配套的精品资源,点击获取 简介:一套开箱即用的Android文件加密解密实现,基于AES算法,兼容Android 5.0至Android 14主流系统版本。工程已集成Gradle构建脚本、CMakeLists.txt及JNI扩展支持,可直接编译运行于…

作者头像 李华
网站建设 2026/6/5 9:17:37

保姆级教程:用Fiddler Everywhere给夜神模拟器抓APP包,告别证书安装失败

零门槛实现APP抓包:Fiddler Everywhere与夜神模拟器完美协作指南 在移动应用开发与测试过程中,抓包分析是每个开发者必备的核心技能。传统方案往往需要复杂的代理设置、繁琐的证书安装以及各种兼容性调试,让不少初学者望而却步。本文将介绍如…

作者头像 李华
网站建设 2026/6/5 9:15:20

长沙AI搜索优化排行权威发布:实体门店与餐饮GEO服务商TOP5全解析

随着生成式AI成为本地流量核心入口,GEO(生成式引擎优化)已成为长沙实体门店抢占AI营销赛道的关键。艾瑞咨询数据显示,2026年长沙地区GEO服务市场规模同比增长71.2%,其中餐饮行业需求占比达38%。在这一背景下&#xff0…

作者头像 李华
网站建设 2026/6/5 9:13:00

终极游戏光标改造指南:用YoloMouse打造你的专属视觉瞄准系统

终极游戏光标改造指南:用YoloMouse打造你的专属视觉瞄准系统 【免费下载链接】YoloMouse Game Cursor Changer 项目地址: https://gitcode.com/gh_mirrors/yo/YoloMouse 还在为游戏中找不到鼠标指针而烦恼吗?在激烈的对战或复杂的策略游戏中&…

作者头像 李华
网站建设 2026/6/5 9:08:08

AI HR助手如何实现‘边想边做’的思维链推理

1. 项目概述:当HR助手开始“自言自语”你有没有试过向一个AI提问,然后它不直接给你答案,而是先在脑子里默默列了一张清单:第一步查政策、第二步翻员工档案、第三步算一笔账——最后才把结果端到你面前?这不是科幻片里的…

作者头像 李华