news 2026/7/4 22:37:06

机器学习 - 感知机(Perceptron)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习 - 感知机(Perceptron)

摘要:感知机是最早的神经网络模型,由罗森布拉特于1950年代提出。它通过输入特征的加权和与阈值函数实现二元分类,属于监督学习算法。感知机由输入层、权重层和输出层组成,使用阶跃函数作为激活函数。训练过程通过迭代更新权重来最小化误差,权重调整公式为wi += α(y-y')xi。Python实现可使用scikit-learn库或自定义类,后者通过阶跃函数完成逻辑运算。感知机简单有效,适合二元分类问题,为后续神经网络发展奠定了基础。

目录

机器学习 - 感知机(Perceptron)

感知机的架构

感知机的训练

示例:Python 实现感知机

方法一:使用 scikit-learn 库

输出结果

说明

方法二:自定义感知机类(基于阶跃函数)

输出结果

说明

阶跃函数在感知机训练中的作用


机器学习 - 感知机(Perceptron)

感知机(Perceptron)是最古老、最简单的神经网络架构之一,由弗兰克・罗森布拉特(Frank Rosenblatt)于 20 世纪 50 年代发明。感知机算法是一种线性分类器,能将输入数据划分为两个可能的输出类别之一,属于监督学习的一种 —— 通过提供带标签的训练数据来训练模型。该算法基于阈值函数工作:先计算输入特征的加权和,再对其应用阈值以生成二元输出。

感知机的架构

单层感知机由输入层、权重层和输出层组成:

  • 输入层的每个节点与权重层的每个节点相连,每条连接都分配有一个权重;
  • 权重层的每个节点先计算输入特征的加权和,再通过阈值函数生成输出。

感知机中使用的阈值函数是赫维赛德阶跃函数(Heaviside step function):当输入大于或等于 0 时返回二元值 1,否则返回 0。权重层每个节点的输出由以下公式确定:若其他情况其中:

  • y 为输出结果;
  • x1​,x2​,...,xn​ 为输入特征;
  • w0​,w1​,w2​,...,wn​ 为对应的权重;
  • ≥0 表示赫维赛德阶跃函数的判断条件。

感知机的训练

感知机算法的训练过程是迭代更新权重的过程,直到模型收敛到一组能正确分类所有训练样本的权重。具体步骤如下:

  1. 初始化权重:将所有权重设为随机值;
  2. 误差计算与权重更新:对每个训练样本,将预测输出与实际输出进行对比,根据误差调整权重以最小化偏差。

感知机的权重更新规则如下:

其中:

  • wi​ 为第i个特征的权重;
  • α 为学习率(learning rate);
  • y 为实际输出;
  • y′ 为预测输出;
  • xi​ 为第i个输入特征。

示例:Python 实现感知机

感知机可通过 scikit-learn 库快速实现,该库提供了专门用于二元分类问题的Perceptron类。以下是具体实现示例:

方法一:使用 scikit-learn 库

from sklearn.linear_model import Perceptron from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = load_iris() # 划分训练集和测试集(测试集占比30%) X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # 创建感知机对象,设置学习率为0.1 perceptron = Perceptron(alpha=0.1) # 在训练集上训练感知机 perceptron.fit(X_train, y_train) # 使用训练好的感知机对测试集进行预测 y_pred = perceptron.predict(X_test) # 评估感知机的准确率 accuracy = accuracy_score(y_test, y_pred) print("准确率(Accuracy):", accuracy)
输出结果

plaintext

准确率(Accuracy): 0.8
说明

训练完成后,感知机可用于新输入数据的预测:给定一组输入值,感知机先计算输入特征的加权和,再对该和应用激活函数得到输出值,该输出值即为对应输入的分类预测结果。

方法二:自定义感知机类(基于阶跃函数)

以下是手动实现感知机的示例,使用阶跃函数作为激活函数:

import numpy as np class Perceptron: def __init__(self, learning_rate=0.1, epochs=100): self.learning_rate = learning_rate # 学习率 self.epochs = epochs # 训练轮次 self.weights = None # 权重(初始化为None) self.bias = None # 偏置(初始化为None) # 阶跃函数:激活函数 def step_function(self, x): return np.where(x >= 0, 1, 0) # x≥0返回1,否则返回0 # 训练方法:输入特征X,目标标签y def fit(self, X, y): n_samples, n_features = X.shape # 获取样本数量和特征数量 # 初始化权重为0,偏置为0 self.weights = np.zeros(n_features) self.bias = 0 # 迭代训练(按轮次更新权重和偏置) for _ in range(self.epochs): for i in range(n_samples): # 计算线性输出(加权和 + 偏置) linear_output = np.dot(self.weights, X[i]) + self.bias # 通过阶跃函数得到预测输出 y_pred = self.step_function(linear_output) # 根据误差更新权重和偏置 update = self.learning_rate * (y[i] - y_pred) self.weights += update * X[i] self.bias += update # 预测方法:输入特征X,返回预测结果 def predict(self, X): linear_output = np.dot(X, self.weights) + self.bias y_pred = self.step_function(linear_output) return y_pred # 测试自定义感知机 if __name__ == "__main__": # 输入数据(二元特征) X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # 目标标签(对应逻辑与运算) y = np.array([0, 0, 0, 1]) # 创建感知机实例(学习率0.1,训练轮次10) perceptron = Perceptron(learning_rate=0.1, epochs=10) # 训练模型 perceptron.fit(X, y) # 测试数据 test_data = np.array([[1, 1], [0, 1]]) # 预测 predictions = perceptron.predict(test_data) print("预测结果:", predictions)
输出结果

plaintext

预测结果: [1 0]
说明

该自定义感知机实现了逻辑与运算的分类:输入[1,1]预测为1,输入[0,1]预测为0,符合预期结果。

阶跃函数在感知机训练中的作用

感知机中使用的激活函数可灵活选择,但阶跃函数是最常用的一种:它在输入为正时返回 1,输入为负或 0 时返回 0。该函数的核心优势是能提供二元输出,完美适配二元分类问题的预测需求 —— 输出结果可直接解释为两个类别之一(如 “是 / 否”“正 / 负”)。

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

【无线可充电传感器网络(WRSN)】公交网络辅助的无人机调度,用于无线可充电传感器网络的可持续充电附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码及仿真…

作者头像 李华
网站建设 2026/7/1 14:23:50

大数据毕设项目:基于Python+Echart的学生心理健康数据可视化系统设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/1 14:47:37

计算机大数据毕设实战-基于Python+Echart的学生心理健康数据可视化系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/1 14:23:56

基于图片识别的菜品销售系统(源码+lw+部署文档+讲解等)

课题介绍本课题旨在设计并实现一套基于图片识别的菜品销售系统,解决传统菜品销售中点餐效率低、菜品展示不直观、库存与销量统计繁琐、用户点餐体验不佳等问题。系统采用SpringBoot作为后端核心框架,结合MyBatis-Plus简化数据存储操作,搭配Vu…

作者头像 李华
网站建设 2026/7/1 14:23:55

【计算机毕业设计案例】基于Python+Echart的学生心理健康数据可视化系统设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/1 15:43:12

互联网人必藏:大模型技术落地实战指南,从小白到高手的进阶之路_互联网行业AI大模型开发解决方案

互联网行业进入存量竞争时代,大模型技术成为创新驱动力。企业面临模型应用、数据安全与快速落地的挑战。数商云推出全栈式AI解决方案,提供场景化能力、私有化部署和敏捷集成,通过三层架构设计,帮助企业实现AI赋能业务增长&#xf…

作者头像 李华