반응형
뇌의 뉴런이 작동하는 방식을 본떠서 학습하는 알고리즘
분류의 한 종류이다.
퍼셉트론 학습방법:
최종입력 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을 반환
|
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 |