퍼셉트론 Perceptron

2022. 11. 17. 00:03·머신러닝
반응형

뇌의 뉴런이 작동하는 방식을 본떠서 학습하는 알고리즘

분류의 한 종류이다.

 

퍼셉트론 학습방법:

최종입력 Z는 입력 X와 가중치W를 벡터곱 한 것이다.

Z를 임계함수(결정함수)에 넣은 후 나온 결과가 맞았는지, 틀렸는지를 판단해서 에러만큼 가중치를 반복적으로 업데이트하면서 데이터를 분류한다.

 

퍼셉트론이 정확히 예측한 경우 > Y값과 Y_hat이 같기 때문에 가중치는 0 > 업데이트하지 않는다.

퍼셉트론이 예측하지 못한 경우 > Y값과 Y_hat이 다름 > 변경해야할 가중치가 존재 > 데이터 업데이트

 

### 퍼셉트론 클래스 ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
 
df = pd.read_csv("https://raw.githubusercontent.com/jmnote/zdata/master/R/iris.csv")
print(df.tail())
 
class Perceptron(object):
    def __init__(self, eta=0.01, n_iter=50, random_state=1):
        self.eta = eta # 학습률
        self.n_iter = n_iter # 학습 횟수
        self.random_state = random_state
        # 퍼셉트론 생성자
        
    def fit(self, X, y):
        rgen = np.random.RandomState(self.random_state)
        self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1+X.shape[1])
        self.errors_=[]
        
        for _ in range(self.n_iter):
            # 입력한 학습횟수 만큼 반복
            
            errors =0
            # 초기 에러는 0
            
            for xi, target in zip(X,y):
                update = self.eta * (target - self.predict(xi))
                # 예측한 값을 사용해서 업데이트할 값 계산
                
                self.w_[1:] += update * xi
                # 가중치 업데이트
                
                self.w_[0] += update
                # 절편의 가중치 업데이트
                
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self
    
    def net_input(self, X):
        return np.dot(X, self.w_[1:] + self.w_[0])
    # 최종 입력 연산 메소드
    
    def predict(self, X):
        return np.where(self.net_input(X) >= 0.0, 1, -1)
    # 예측 메소드, 최종입력이 0보다 크거나 같으면 1, 아니면 -1을 반환
Colored by Color Scripter
cs

 

 

### 퍼셉트론 학습 ###

1
2
3
4
5
6
7
8
y = df.iloc[0:100, 4].values
y = np.where(y == 'setosa', -1, 1)
X = df.iloc[0:100, [0, 2]].values
# 붓꽃데이터 셋
 
ppn = Perceptron(eta=0.1, n_iter=10)
ppn.fit(X, y)
# 학습률 0.1, 학습횟수 10인 퍼셉트론 객체 생성, X, y로 학습
cs

결과

시각화 라이브러리를 이용해서 결과를 시각화하면 다음과 같다.

그림에서 처럼 붓꽃데이터셋은 어느 하나의 기준을 바탕으로 이진 분류되었다.

 

퍼셉트론은 두 클래스가 선형적으로 구분되는 경우에 분류가 보장된다.

선형 구분이 가능한 경우에만 분류가 보장되고 선형 구분이 불가능한 경우에는 수렴하지 않을 수 있다.

반응형

'머신러닝' 카테고리의 다른 글

선형회귀 - Linear Regression  (3) 2023.01.13
커널 SVM으로 비선형적 데이터 분류  (0) 2022.11.20
로지스틱 회귀 Logistic Regression  (1) 2022.11.17
사이킷런으로 퍼셉트론 학습  (0) 2022.11.17
적응형 선형 뉴런 Adaline, 경사하강법  (1) 2022.11.17
'머신러닝' 카테고리의 다른 글
  • 커널 SVM으로 비선형적 데이터 분류
  • 로지스틱 회귀 Logistic Regression
  • 사이킷런으로 퍼셉트론 학습
  • 적응형 선형 뉴런 Adaline, 경사하강법
김천종
김천종
  • 김천종
    김천종
    김천종
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 파이썬 (6)
      • Pandas (24)
      • 자료구조 (14)
      • 알고리즘 (4)
      • 아무거나 (16)
      • 머신러닝 (20)
      • ML 실습 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
김천종
퍼셉트론 Perceptron
상단으로

티스토리툴바