본문 바로가기
머신러닝

회귀 모델 - 로지스틱 회귀 모델

by 핸들이없는8톤트럭 2022. 8. 19.
반응형

이진 분류 문제(Binary Classification Problem)

0과 1을 구분하는 가장 단순한 분류 문제입니다. 학습 데이터에는 각 특징에 대해 클래스 레이블이 주어집니다. 0과 1의 값은 숫자로서 의미가 없는 범주형 변수(categorical variable)입니다. 이진 분류는 특징이 어느 클래스에 속하는지 구분하는 방법입니다. 두 클래스가 구분되는 특징 공간 상의 경계를 결정 경계라고 합니다.

 

로지스틱 회귀(Logistic Regression)

선형 회귀를 이용해 분류(Classification) 문제를 해결하는 방법입니다. 이진 분류는 레이블이 0 또는 1의 범주(category)로 지정된 문제를 해결하는 것입니다. 로지스틱 함수(logistic function)은 출력 값의 범위를 [0,1]로 제한하는 함수입니다. 로지스틱 함수의 출력은 이를 통해 0~100%의 확률을 표현할 수 있습니다.

 

로지스틱 회귀 모델의 결정 경계

로지스틱 회귀 모델의 출력은 입력이 클래스 1일 확률을 의미합니다. 전체 확률의 합은 1이므로, 클래스 0일 확률은 1- 출력입니다. 로지스틱 회귀의 결정 경계는 출력 값이 0.5보다 크면 클래스 1로 분류하고 선형 회귀에서 회귀 직선이, 로지스틱 회귀에서는 결정 경계가 됩니다.

 

로지스틱 회귀 모델의 학습

분류 문제의 손실 함수

분류 문제에서 다루는 숫자는 연속형 변수가 아니므로, 선형 회귀와 달리 로지스틱 손실(logistic loss)를 사용합니다. 최대 가능도(maximum likelihood)로부터 유도된 손실 함수로서 0과 1 각 클래스 레이블에 대해 손실 함수가 대칭으로 발생하게 됩니다.

 

로지스틱 회귀의 구현

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

def plot_decision_boundary(model,X,y):
    x_min, x_max = X[:,0].min() - .5, X[:,0].max() +.5
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    h = .02
    xx,yy = np.meshgrid(np.arange(x_min,x_max,h), np.arange(y_min,y_max,h))
    Z = model.predict(np.c_[xx.ravel(),yy.ravel()])

    Z = Z.reshape(xx.shape)
    plt.pcolormesh(xx,yy,Z,shading = 'nearest',cmap=plt.cm.Paired)

    plt.scatter(X[:,0],X[:,1],c=y,edgecolors='k',cmap=plt.cm.Paired)
    plt.xlim(xx.min(),xx.max())
    plt.ylim(yy.min(),yy.max())
    plt.xticks(())
    plt.yticks(())
dataset =load_iris()
print(dataset.keys())
print(dataset['data'].shape)
print(dataset['target'])
print(dataset['target_names'])

data = dataset['data']
x = data[:,:2]
print(x.shape)
y= dataset['target']
print(y.shape)
model = LogisticRegression()
model.fit(x,y)
plt.figure(figsize=(6,5))
plot_decision_boundary(model,x,y)
plt.show()
반응형

댓글