>  기사  >  백엔드 개발  >  Python에서 처음부터 퍼셉트론 구현

Python에서 처음부터 퍼셉트론 구현

DDD
DDD원래의
2024-10-30 22:11:30719검색

Implementing a Perceptron from Scratch in Python

안녕하세요 개발자 여러분,

퍼셉트론은 머신러닝에서 가장 간단하고 기본적인 개념 중 하나입니다. 신경망의 기초를 형성하는 이진 선형 분류기입니다. 이 게시물에서는 Python에서 Perceptron을 처음부터 이해하고 구현하는 단계를 안내하겠습니다.

들어가자!


퍼셉트론이란 무엇입니까?

퍼셉트론은 이진 분류기의 지도 학습을 위한 기본 알고리즘입니다. 입력 특성이 주어지면 퍼셉트론은 간단한 임계값 함수를 기반으로 클래스를 구분하는 데 도움이 되는 가중치를 학습합니다. 간단한 용어로 작동 방식은 다음과 같습니다.

  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. 가중치 및 편향 초기화: 처음에는 가중치가 0으로 설정되어 모델이 처음부터 학습을 시작할 수 있습니다.
  2. 선형 출력 계산: 각 데이터 포인트에 대해 퍼셉트론은 입력의 가중 합계와 편향을 계산합니다.
  3. 활성화(단계 함수): 선형 출력이 0보다 크거나 같으면 클래스 1을 할당합니다. 그렇지 않으면 클래스 0을 할당합니다.
  4. 업데이트 규칙: 예측이 잘못된 경우 모델은 오류를 줄이는 방향으로 가중치와 편향을 조정합니다. 업데이트 규칙은 다음과 같이 제공됩니다. 가중치 = 학습률 * (y_true - y_pred) * x

이렇게 하면 잘못 분류된 지점에 대해서만 퍼셉트론이 업데이트되어 모델이 점차 올바른 결정 경계에 가까워집니다.


결정 경계 시각화

훈련 후 결정 경계를 시각화합니다. 이는 더 복잡한 데이터 세트로 작업하는 경우 특히 유용합니다. 지금은 AND 게이트를 사용하여 간단하게 설명하겠습니다.


MLP(다층 퍼셉트론)로 확장

퍼셉트론은 선형 분리 가능한 문제로 제한되지만 MLP(다층 퍼셉트론)와 같은 더 복잡한 신경망의 기초입니다. MLP를 사용하면 숨겨진 레이어와 활성화 함수(ReLU 또는 Sigmoid 등)를 추가하여 비선형 문제를 해결할 수 있습니다.


요약

퍼셉트론은 간단하지만 기본적인 기계 학습 알고리즘입니다. 작동 방식을 이해하고 처음부터 구현함으로써 기계 학습 및 신경망의 기본 사항에 대한 통찰력을 얻습니다. 퍼셉트론의 아름다움은 단순함에 있으며 AI에 관심이 있는 모든 사람에게 완벽한 출발점이 됩니다.

위 내용은 Python에서 처음부터 퍼셉트론 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.