본문 바로가기
CS(Computer Science)/인공지능

6. 로지스틱 회귀

by 동욷 2023. 3. 19.

로지스틱 회귀 (Logistic Regression)

 

- 입력변수 x와 출력변수 y 간의 관계를 확률로 모델링

 

- 출력변수는 0 또는 1의 값을 가질 수 있으며, 0 또는 1의 값이 나오도록 확률을 조정하는 함수로는 로지스틱 함수가 사용된다.

 

- 로지스틱 함수는 S자 모양의 곡선으로 표현되며, 입력 값에 따라 출력 값을 0과 1 사이 값으로 변환합니다.

 

- 입력 변수의 가중치(weight)와 편향(bias)을 조정하여 최적의 모델을 학습한다.

 

 

<코드분석>

 

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

cancer = load_breast_cancer()
x = cancer.data
y = cancer.target
x_train, x_test, y_train, y_test = train_test_split(x,y,stratify = y, test_size = 0.2 , random_state = 42)

np.unique(y_train, return_counts = True)

class LogisticNeuron :
    def __init__(self):
        self.w = None
        self.b = None
    def forpass(self, x):
        z = np.sum(x*self.w) + self.b
        return z
    def backprop(self, x, err):
        w_grad = x * err
        b_grad = 1 * err
        return w_grad , b_grad
    def activation(self, z):
        z = np.clip(z, -100, None)
        a = 1 / (1+np.exp(-z))
        return a
    def fit(self, x, y, epochs = 100):
        self.w = np.ones(x.shape[1])
        self.b = 0
        for i in range(epochs):
            for x_i, y_i in zip(x,y):
                z = self.forpass(x_i)
                a = self.activation(z)
                err = -(y_i -a)
                w_grad, b_grad = self.backprop(x_i,err)
                self.w -= w_grad
                self.b -= b_grad
    def predict(self, x):
        z = [self.forpass(x_i) for x_i in x]
        a = self.activation(np.array(z))
        return a > 0.5


neuron = LogisticNeuron()
neuron.fit(x_train,y_train)
print(np.mean(neuron.predict(x_test) == y_test))

plt.subplot(1,4,1)
plt.plot(x)


plt.subplot(1,4,2)
plt.plot(y)

plt.subplot(1,4,3)
plt.plot(x_train)

plt.subplot(1,4,4)
plt.plot(y_train)
plt.show()

 

load_breast_cancer() : 유방암 데이터 셋

 

train_test_split() : 데이터를 학습용 데이터와 테스트용 데이터로 나눈다.

 

stratify = y : 클래스 비율을 동일하게 유지하도록 하여 데이터를 더 잘 분할하게 한다.

 

학습용 데이터 : x_train , y_train

테스트용 데이터 : x_test, y_test

 

 

LogisticNeuron 클래스

- __init__() : 객체 생성자 메서드 , 가중치와 편향을 초기화

- forpass() : 입력값과 가중치를 곱하여 더한 후, 편향을 더해 총합을 계산합니다.

- backprop() : 오차를 계산하여 가중치와 편향의 기울기를 계산합니다.

- activation() : 계산된 총합을 시그모이드 함수에 입력하여 활성화 함수를 적용합니다.

- fit() : 학습용 데이터를 이용하여 모델을 학습합니다.

 

  epochs : 학습 횟수

  x_i : 입력값,  y_i : 실제 출력값

  learning_rate : 학습률

  

알고리즘 

1. forpass() 와 activation()으로 출력값 a 계산

2. y_i와의 오차 err 계산

3. backprop() 으로 기울기 계산

4. 기울기로 가중치와 편향을 업데이트

 

 

- predict() : 학습된 모델을 이용하여 입력값의 출력을 예측

 

   예측값이 0.5보다 크면 True, 0.5보다 작으면 False 반환

728x90

'CS(Computer Science) > 인공지능' 카테고리의 다른 글

8. 사이킷런 경사하강법  (0) 2023.03.19
7. 단일층 신경망  (0) 2023.03.19
5. 뉴런 생성 & 시그모이드 함수  (0) 2023.03.18
4. 경사하강법  (0) 2023.03.18
3. 선형 회귀  (0) 2023.03.18