搜索
首页后端开发Python教程用 Python 从头开始​​实现感知器

Implementing a Perceptron from Scratch in Python

开发者们大家好,

感知器是机器学习中最简单、最基本的概念之一。它是构成神经网络基础的二元线性分类器。在这篇文章中,我将逐步介绍使用 Python 从头开始​​理解和实现感知器的步骤。

让我们开始吧!


什么是感知器?

A 感知器 是二元分类器监督学习的基本算法。给定输入特征,感知器学习权重,帮助基于简单的阈值函数分离类别。简单来说它的工作原理如下:

  1. 输入:特征向量(例如,[x1, x2])。
  2. 权重:每个输入特征都有一个权重,模型根据模型的表现来调整权重。
  3. 激活函数:计算输入特征的加权和并应用阈值来决定结果是否属于一个类或另一类。

从数学上来说,它看起来像这样:

f(x) = w1*x1 w2*x2 ... wn*xn b

地点:

  • f(x) 是输出,
  • w代表权重,
  • x 表示输入特征,
  • b 是偏差项。

如果 f(x) 大于或等于阈值,则输出为类别 1;否则,它是 0 类。


第 1 步:导入库

这里我们将仅使用 NumPy 进行矩阵运算,以保持轻量级。

import numpy as np

第 2 步:定义感知器类

我们将把感知器构建为一个类,以保持一切井井有条。该课程将包括训练和预测的方法。

class Perceptron:
    def __init__(self, learning_rate=0.01, epochs=1000):
        self.learning_rate = learning_rate
        self.epochs = epochs
        self.weights = None
        self.bias = None

    def fit(self, X, y):
        # Number of samples and features
        n_samples, n_features = X.shape

        # Initialize weights and bias
        self.weights = np.zeros(n_features)
        self.bias = 0

        # Training
        for _ in range(self.epochs):
            for idx, x_i in enumerate(X):
                # Calculate linear output
                linear_output = np.dot(x_i, self.weights) + self.bias
                # Apply step function
                y_predicted = self._step_function(linear_output)

                # Update weights and bias if there is a misclassification
                if y[idx] != y_predicted:
                    update = self.learning_rate * (y[idx] - y_predicted)
                    self.weights += update * x_i
                    self.bias += update

    def predict(self, X):
        # Calculate linear output and apply step function
        linear_output = np.dot(X, self.weights) + self.bias
        y_predicted = self._step_function(linear_output)
        return y_predicted

    def _step_function(self, x):
        return np.where(x >= 0, 1, 0)

在上面的代码中:

  • fit:此方法通过在错误分类点时调整权重和偏差来训练模型。
  • 预测:此方法计算新数据的预测。
  • _step_function:此函数应用阈值来确定输出类别。

第 3 步:准备一个简单的数据集

我们将使用一个小数据集来轻松可视化输出。这是一个简单的与门数据集:

# AND gate dataset
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1])  # Labels for AND gate

第 4 步:训练和测试感知器

现在,让我们训练感知器并测试它的预测。

# Initialize Perceptron
p = Perceptron(learning_rate=0.1, epochs=10)

# Train the model
p.fit(X, y)

# Test the model
print("Predictions:", p.predict(X))

与门的预期输出:

import numpy as np

感知器学习过程的解释

  1. 初始化权重和偏差:开始时,权重设置为零,这允许模型从头开始学习。
  2. 计算线性输出:对于每个数据点,感知器计算输入的加权和加上偏差。
  3. 激活(Step Function):如果线性输出大于或等于0,则分配类别1;否则,它分配类 0。
  4. 更新规则:如果预测不正确,模型会朝减少误差的方向调整权重和偏差。更新规则由下式给出: 权重 = 学习率 * (y_true - y_pred) * x

这使得感知器仅更新错误分类的点,逐渐推动模型更接近正确的决策边界。


可视化决策边界

训练后可视化决策边界。如果您正在处理更复杂的数据集,这尤其有用。现在,我们将使用 AND 门让事情变得简单。


扩展到多层感知器 (MLP)

虽然感知器仅限于线性可分离问题,但它是多层感知器 (MLP) 等更复杂神经网络的基础。通过 MLP,我们添加隐藏层和激活函数(如 ReLU 或 Sigmoid)来解决非线性问题。


概括

感知器是一种简单但基础的机器学习算法。通过了解它的工作原理并从头开始实施它,我们深入了解机器学习和神经网络的基础知识。感知器的美妙之处在于它的简单性,使其成为任何对人工智能感兴趣的人的完美起点。

以上是用 Python 从头开始​​实现感知器的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python vs. C:了解关键差异Python vs. C:了解关键差异Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python vs.C:您的项目选择哪种语言?Python vs.C:您的项目选择哪种语言?Apr 21, 2025 am 12:17 AM

选择Python还是C 取决于项目需求:1)如果需要快速开发、数据处理和原型设计,选择Python;2)如果需要高性能、低延迟和接近硬件的控制,选择C 。

达到python目标:每天2小时的力量达到python目标:每天2小时的力量Apr 20, 2025 am 12:21 AM

通过每天投入2小时的Python学习,可以有效提升编程技能。1.学习新知识:阅读文档或观看教程。2.实践:编写代码和完成练习。3.复习:巩固所学内容。4.项目实践:应用所学于实际项目中。这样的结构化学习计划能帮助你系统掌握Python并实现职业目标。

最大化2小时:有效的Python学习策略最大化2小时:有效的Python学习策略Apr 20, 2025 am 12:20 AM

在两小时内高效学习Python的方法包括:1.回顾基础知识,确保熟悉Python的安装和基本语法;2.理解Python的核心概念,如变量、列表、函数等;3.通过使用示例掌握基本和高级用法;4.学习常见错误与调试技巧;5.应用性能优化与最佳实践,如使用列表推导式和遵循PEP8风格指南。

在Python和C之间进行选择:适合您的语言在Python和C之间进行选择:适合您的语言Apr 20, 2025 am 12:20 AM

Python适合初学者和数据科学,C 适用于系统编程和游戏开发。1.Python简洁易用,适用于数据科学和Web开发。2.C 提供高性能和控制力,适用于游戏开发和系统编程。选择应基于项目需求和个人兴趣。

Python与C:编程语言的比较分析Python与C:编程语言的比较分析Apr 20, 2025 am 12:14 AM

Python更适合数据科学和快速开发,C 更适合高性能和系统编程。1.Python语法简洁,易于学习,适用于数据处理和科学计算。2.C 语法复杂,但性能优越,常用于游戏开发和系统编程。

每天2小时:Python学习的潜力每天2小时:Python学习的潜力Apr 20, 2025 am 12:14 AM

每天投入两小时学习Python是可行的。1.学习新知识:用一小时学习新概念,如列表和字典。2.实践和练习:用一小时进行编程练习,如编写小程序。通过合理规划和坚持不懈,你可以在短时间内掌握Python的核心概念。

Python与C:学习曲线和易用性Python与C:学习曲线和易用性Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。