用 Python 從頭開始實作感知器

DDD
發布: 2024-10-30 22:11:30
原創
737 人瀏覽過

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學習者快速成長!