机器学习 - 感知机(Perceptron)

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

目录

[机器学习 - 感知机(Perceptron)](#机器学习 - 感知机(Perceptron))

感知机的架构

感知机的训练

[示例:Python 实现感知机](#示例:Python 实现感知机)

[方法一:使用 scikit-learn 库](#方法一:使用 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 库

python 复制代码
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
说明

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

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

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

python 复制代码
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。该函数的核心优势是能提供二元输出,完美适配二元分类问题的预测需求 ------ 输出结果可直接解释为两个类别之一(如 "是 / 否""正 / 负")。

相关推荐
小鸡吃米…2 小时前
机器学习 - 轮次(Epoch)
人工智能·深度学习·机器学习
毅炼2 小时前
Java 基础常见问题总结(1)
开发语言·python
风栖柳白杨2 小时前
【语音识别】Qwen3-ASR原理及部署
人工智能·python·语音识别·xcode·audiolm
Wang201220132 小时前
2026流行的 AI Agent开发框架 (构建“智能体”)
人工智能
张人玉2 小时前
VisionPro Blob、条码识别、OCR 结构化速记版
人工智能·算法·机器学习·vsionpro
Elastic 中国社区官方博客2 小时前
Elasticsearch:使用 Elastic Workflows 构建自动化
大数据·数据库·人工智能·elasticsearch·搜索引擎·自动化·全文检索
OnYoung2 小时前
编写一个Python脚本自动下载壁纸
jvm·数据库·python
跨境卫士-小汪2 小时前
选品更稳的新打法:用“用户决策阻力”挑品——阻力越大,越有机会做出溢价
大数据·人工智能·产品运营·跨境电商·内容营销·跨境
R-G-B2 小时前
python 验证每次操作图片处理的顺序是否一致,按序号打上标签,图片重命名
开发语言·python·图片重命名·按序号打上标签·验证图片处理的顺序