728x90
딥러닝 기초 - Perceptron
Iris 꽃 분류 문제를 해결하기위한 퍼셉트론 모델 구현.
import numpy as np
class Perceptron(object):
"""
퍼셉트론 분류기
매개변수
------------
learning_rate : float
학습률 (0.0과 1.0 사이)
n_iter : int
훈련 데이터셋 반복 횟수
random_state : int
가중치 무작위 초기화를 위한 난수 생성기 시드
속성
------------
w_ : 1d-array
학습된 가중치
errors_ : list
에포크마다 누적된 분류 오류
"""
def __init__(self, learning_rate=0.01, n_iter=50, random_state=1):
self.learning_rate = learning_rate
self.n_iter = n_iter
self.random_state = random_state
def fit(self, X, y):
"""
훈련 데이터 학습
매개변수
-------------
X : {array-like}, shape = [n_samples, n_features]
n_samples개의 샘플과 n_features개의 특성으로 이루어진 훈련 데이터
y : array-like, shape = [n_samples]
타깃 값
반환값
-------
self : object
"""
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
for xi, target in zip(X, y):
update = self.learning_rate * (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):
"""단위 계단 함수를 사용하여 클래스 레이블을 반환 ; 0보다 크거나 같으면 1, 작으면 -1 반환"""
return np.where(self.net_input(X) >= 0.0, 1, -1)
◆ 이해하기 ◆
- target이 setosa면 -1, versicolor면 1
- w_[0] 는 bias
- w_[1:] 는 weight
- net_input 은 wX + b
- predict는 wX+b가 0과 같거나 0보다 크면 1, 0보다 작으면 -1
- update 는 '학습률(0.1)' * '목표(-1 or 1)' - '예측(1 or -1)'
- update 는 0.2 or 0 or -0.2 (예측과 실제가 같으면 0, 다르면 0.2 or -0.2)
- 따라서, 예측과 실제가 다르면 가중치를 업데이트하고 errors에 포함.
- 최적의 분류선을 만드는 가중치와 편향을 구함.
Iris 입력 데이터에서 X, y 설정하기.
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
df = pd.read_csv(url, header=None, encoding='utf-8')
# 데이터 프레임 0~99번 인덱스, 4번째 컬럼(class)의 값이 setosa면 1, 아니면 -1 값을 가지는 array
y = df.iloc[0:100, 4].values
y = np.where( y == 'Iris-setosa', -1, 1)
# 데이터 프레임 0~99번 인덱스에서 꽃받침 길이[0번 컬럼]와 꽃잎 길이[2번 컬럼]를 추출
X = df.iloc[0:100, [0, 2]].values
학습
ppn = Perceptron(learning_rate=0.1, n_iter=10)
ppn.fit(X, y)
결과
'AI' 카테고리의 다른 글
1208 - 서포트백터머신 (0) | 2021.12.08 |
---|---|
1207 - 로지스틱회귀 (0) | 2021.12.07 |
1207 - 아달린 SGD (0) | 2021.12.07 |
1202 - 아달린 (0) | 2021.12.02 |
Kaggle 준비 해보기(1) (0) | 2021.08.16 |