ホームページ  >  記事  >  バックエンド開発  >  Python でパーセプトロンを最初から実装する

Python でパーセプトロンを最初から実装する

DDD
DDDオリジナル
2024-10-30 22:11:30719ブラウズ

Implementing a Perceptron from Scratch in Python

開発者の皆さん、

パーセプトロンは、機械学習における最も単純かつ最も基本的な概念の 1 つです。これは、ニューラル ネットワークの基礎を形成するバイナリ線形分類器です。この投稿では、Python でパーセプトロンを最初から理解して実装する手順を説明します。

飛び込んでみましょう!


パーセプトロンとは何ですか?

パーセプトロン は、バイナリ分類器の教師あり学習のための基本的なアルゴリズムです。入力特徴が与えられると、パーセプトロンは単純なしきい値関数に基づいてクラスを分離するのに役立つ重みを学習します。簡単に説明すると、次のようになります:

  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 ゲート データセットです:

# 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))

AND ゲートの期待される出力:

import numpy as np

パーセプトロン学習プロセスの説明

  1. 重みとバイアスの初期化: 開始時に重みはゼロに設定され、モデルが最初から学習を開始できるようになります。
  2. 線形出力の計算: 各データ ポイントについて、パーセプトロンは入力とバイアスの加重合計を計算します。
  3. アクティブ化 (ステップ関数): 線形出力がゼロ以上の場合、クラス 1 が割り当てられます。それ以外の場合は、クラス 0 が割り当てられます。
  4. 更新ルール: 予測が間違っている場合、モデルは誤差を減らす方向に重みとバイアスを調整します。更新ルールは次のように与えられます。 重み = 学習率 * (y_true - y_pred) * x

これにより、誤って分類された点のみパーセプトロンが更新され、徐々にモデルが正しい決定境界に近づきます。


意思決定の境界線を視覚化する

トレーニング後の決定境界を視覚化します。これは、より複雑なデータセットを扱う場合に特に役立ちます。現時点では、AND ゲートを使用して物事を単純にしておきます。


多層パーセプトロン (MLP) への拡張

パーセプトロンは線形分離可能な問題に限定されていますが、多層パーセプトロン (MLP) のようなより複雑なニューラル ネットワークの基礎です。 MLP では、隠れ層と活性化関数 (ReLU やシグモイドなど) を追加して、非線形問題を解決します。


まとめ

パーセプトロンは、単純ですが基礎的な機械学習アルゴリズムです。その仕組みを理解し、一から実装することで、機械学習とニューラル ネットワークの基本についての洞察が得られます。パーセプトロンの美しさはそのシンプルさにあり、AI に興味がある人にとって完璧な出発点となります。

以上がPython でパーセプトロンを最初から実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。