미식가의 개발 일기

[머신러닝] 로지스틱 회귀분석(Logistic Regresstion) 본문

ML, DL

[머신러닝] 로지스틱 회귀분석(Logistic Regresstion)

대체불가 핫걸 2024. 7. 13. 15:15


로지스틱 회귀분석이란?

  • 이진 분류 문제를 풀기 위한 설계된 통계방법(다중 클래스 분류 문제도 적용 가능)
  • 데이터 수가 많지 않고, 간단한 모델이 필요할 때 사용
  • 분석결과에 대한 설명과 해석이 중요할 때 사용

 

예제 데이터 생성 및 시각화

예제 데이터 생성
from sklearn.datasets import make_classification

X, y = make_classification(n_features=1, n_samples=300,
                           n_redundant=0, n_informative=1,
                           n_clusters_per_class=1, class_sep=0.5,
                           random_state=0)
  • n_features: 특성의 개수
  • n_samples: 샘플의 개수
  • n_redundant: 중복값의 개수
  • n_informative: 유용한 특성의 수
  • n_clusters_per_class: 클래스별 클러스터의 수
  • class_sep: 클래스 간 분리 정도, 값이 클수록 분리가 뚜렷해짐
  • random_state: 랜덤 상태, 값이 0이면 실행할 때마다 같은 결과가 나옴
예제 데이터 시각화
import matplotlib.pyplot as plt

plt.scatter(X, y, c=y)
plt.xlabel('Feature')
plt.ylabel('Target')
plt.colorbar(label='Target')
plt.show()

 

  • plt.scatter: 데이터를 산점도로 그림 → c=y: 점의 색을 y의 값에 따라 다르게 설정

 

로지스틱 회귀 모델 생성

from sklearn.linear_model import LogisticRegression
import numpy as np

# 로지스틱 회귀 모델 생성
model = LogisticRegression()

# 모델 훈련
model.fit(X, y)

x_data = np.linspace(-1.5, 1.5, 100).reshape(-1, 1)
predict = model.predict_proba(x_data)[:, 1]
plt.plot(x_data, predict, lw=3)

plt.scatter(X, y, c=y)
plt.xlabel('Feature')
plt.ylabel('Target')
plt.colorbar(label='Target')
plt.show()

  • np.linspace(-1.5, 1.5, 100): -1.5~1.5까지 균등하게 100개의 숫자를 생성
  • reshape(-1, 1): 100개의 숫자를 1열짜리 100행의 2차원 배열로 변환, 각 숫자를 하나의 샘플로 간주
  • model.predict_proba(x_data)[:, 1]: 클래스 1에 속할 확률을 예측
    [[P(class=0), P(class=1)],
     [P(class=0), P(class=1)],
     [P(class=0), P(class=1)],
     ...
    ]
    
    이진 분류에서 클래스 1은 긍정적인 결과나 참인 결과를 나타낸다. 따라서 관심 있는 클래스가 클래스 1이므로 클래스 1에 속할 확률을 예측한다.
  • → 클래스 1에 속할 확률을 예측하는 이유는?:
  • lw=3: 선 두께

 

매개변수

  • 형광펜 값이 기본값
penalty 정규화 종류 -> l1, l2, elasticnet, none
dual True: 이중(dual): 데이터 샘플 수 > 특징 수 
False: 원시(Primal): 데이터 샘플 수 < 특징 수
tol 최적화 중단을 위한 허용 오차 -> 1e-4
C 정규화 강도(값이 작을수록 강함) -> 1.0
fit_intercept 절편(상수 항) 포함 여부 -> True, False
class_weight 가충치(불균형 처리) -> None
random_state 무작위성 설정 -> None
solver 최적화 문제 해결 알고리즘 -> newton-cg, lbfgs, liblinear, sag, saga
max_iter 최대 반복 횟수 -> 100
multi_class 다중 클래스 분류 전략 -> auto, ovr, multinomial
verbose 로그 메세지의 양 설정 -> 0, 1
warm_start 모델 초기화 -> True, False
n_jobs CPU 코어 수 -> None
  • 매개변수 적용 방법
model = LogisticRegression(penalty='l2', 
                            C=1.0, 
                            solver='lbfgs', 
                            max_iter=100, 
                            class_weight=None, 
                            random_state=None)

 

반응형