用 Python 从头开始​​实现感知器

DDD
发布: 2024-10-30 22:11:30
原创
736 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!