news 2026/4/30 14:12:54

机器学习 - 感知机(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/4/28 10:16:00

分布式锁的特性是什么?如何实现分布式锁?

一、特性互斥性:在任何时刻,只有一个节点可以持有锁,确保资源的独占访问。不会发生死锁:如果一个节点崩溃,锁可以被其他节点获取,避免死锁。公平性:如果多个节点同时申请锁,系统应该…

作者头像 李华
网站建设 2026/4/23 15:51:14

Java面试早就不问八股文了!都是面试场景题,没做过根本回答不上来!

现在 Java 面试确实早已从死记硬背的 “八股文” 转向了场景化、实战化的问题考察,核心是检验你解决实际业务问题的能力,而不是单纯的知识点记忆。没真正做过相关项目的话,这类问题确实很难答到点子上。下面我整理了几个高频的 Java 面试场景…

作者头像 李华
网站建设 2026/4/23 11:29:09

为什么氛围编程有意义

“如果你广泛了解路,你会在一切中看到它。” — 宫本武藏 [1] 为什么我对氛围编程有如此强烈的信念?为什么我花这么多时间来做它并传达它? 我不是 AI 专家。上次我研究它是在大学,我几乎不知道"随机森林"是什么。 我…

作者头像 李华
网站建设 2026/4/23 14:27:31

DeepSeek-OCR 2实战:让AI像人一样“看懂”复杂文档

文章目录一、先唠唠为啥选DeepSeek-OCR 2?比传统OCR强在哪?二、实战准备:3分钟搞定环境搭建三、核心实战:处理3类复杂文档,代码直接抄场景1:识别带表格的合同,自动转Excel场景2:识别…

作者头像 李华
网站建设 2026/4/23 13:00:35

PCIe-Completion Timeout Mechanism

“完成超时机制(Completion Timeout Mechanism)”定义了在芯片层面实现事务层可靠性兜底的核心硬件安全机制。它不是一个性能优化特性,而是一个必须由硬件定时器、请求跟踪表和错误报告逻辑实现的“最后防线”,用于从系统性的挂起或死锁中恢复。 完成超时机制的本质是:当…

作者头像 李华