로지스틱 회귀 분석

Apic·2025년 7월 26일
0

코딩

목록 보기
29/31

개요

로지스틱 회귀 분석은 주로 예/아니오 있음/없음과 같이 결과가 두 가지로 나뉘는 경우에 사용된다.

  1. 확률 추정: 로지스틱 회귀는 데이터가 특정 클래스(예/아니오)에 속할 확률을 추정한다.

    예: 80%
    아니오: 20%

  2. 시그모이드 함수: 로지스틱 회귀는 시그모이드 함수를 사용하여 입력 데이터의 선형 조합을 0과 1사이의 값으로 변환한다.
  3. 최대 우도 추정: 로지스틱 회귀 모델은 최대 우도 추정(MLE) 방법으로 추정한다. 이것은 확률을 최대화하는 파라미터 값을 찾는 과정이다.
  4. 이진 분류: 1-다 방식이나 1-1 방식을 통해 다중 클래스 분류 문제에도 적용될 수 있다.

    다중 클래스 분류는 정답이 여러개인 경우를 의미한다.
    사진을 보고 이 사진에는 어떤 동물이 있냐 라고 했을 때 하나의 동물이 있을 수 있지만 여러 마리의 동물이 있을 수도 있다.

장점

  1. 해석 용이성: 로지스틱 회귀는 결과를 해석하기 쉽다. 각 특성의 가중치를 분석해 어떤 특성이 더 영향을 주었는지 확인할 수 있다.
  2. 확률 추정: 단순히 분류 뿐만 아니라 결과의 불확실성을 평가할 수 있다.
  3. 유연성: 다양한 유형의 데이터에 적용할 수 있고, 커널 방법 등을 사용하여 비선형 관계를 모델링할 수 있다.

한계점

  1. 로지스틱 회귀는 기본적으로 선형 관계를 가정하기 때문에 비선형 관계에서는 추가적인 기법이 필요하다.
  2. 중요하지 않거나 상관관계가 높은 특성이 포함되어있으면 성능이 저하될 수 있다.
  3. 특성의 수가 많거나 복잡하면 과적합이 일어날 수 있다.

코드

로지스틱 회귀 함수에는 여러 파라미터가 있다.

  • penalty: 정규화 종류. l1, l2, elasticnet, none 중 선택. 기본값은 'l2'.
    • L1: 가중치의 절댓값 합에 페널티를 부과. 특성 선택 효과가 있어 중요하지 않은 특성의 가중치를 0으로 만듦
    • L2: 가중치의 제곱합에 페널티를 부과. 가중치를 작게 만들어 과적합 방지, 모든 특성을 유지
    • ElasticNet: L1과 L2의 조합. l1_ratio 매개변수로 비율 조절
    • None: 정규화 없음
  • dual: 이중 또는 원시 방법 선택. 기본값은 False.
    • 원시 문제 vs 이중 문제 선택 *
    • 일반적으로 샘플 수가 특성 수보다 많으면 False가 효율적
  • tol: 최적화 중단을 위한 허용 오차. 기본값은 1e-4.
    • 최적화 알고리즘의 수렴 기준
    • 작을수록 더 정확하지만 시간이 오래 걸림
    • 기본값 1e-4는 대부분 상황에서 적절
  • C: 정규화 강도의 역수. 값이 작을수록 강한 정규화. 기본값은 1.0.
    • 정규화 강도의 역수로, 작을수록 강한 정규화
    • C=0.01: 매우 강한 정규화 (단순한 모델)
    • C=1.0: 기본값, 적당한 정규화
    • C=100: 약한 정규화 (복잡한 모델 허용)
  • fit_intercept: 모델에 절편(상수 항) 포함 여부. 기본값은 True.
    • True: y = w₁x₁ + w₂x₂ + ... + b (절편 b 포함)
    • False: y = w₁x₁ + w₂x₂ + ... (절편 없음)
    • 일반적으로 True가 좋음
  • intercept_scaling: 절편에 적용되는 스케일링 팩터. fit_intercept가 True일 때 사용.
    • 절편 항에 가상의 특성을 추가할 때 사용하는 스케일링 값
    • liblinear solver에서 절편의 정규화를 조절
  • class_weight: 클래스 불균형을 처리하기 위한 가중치. 기본값은 None.
    • None: 모든 클래스를 동일하게 처리
    • balanced: 클래스 빈도에 반비례하는 가중치 자동 계산
    • 딕셔너리: {0: 1, 1: 2} 형태로 직접 지정
  • random_state: 난수 발생기 시드. 결과 재현성을 위함.
    • 난수 시드 고정으로 재현 가능한 결과 보장
    • solver가 확률적 요소를 가질 때 중요
  • solver: 최적화 문제를 해결하기 위한 알고리즘. 'newton-cg', 'lbfgs', 'liblinear', |'sag', 'saga' 등 선택 가능.
    • newton-cg: 뉴턴 방법 기반, L2 정규화만 지원, 대용량 데이터에 적합
    • lbfgs: 메모리 효율적인 준뉴턴 방법, 소규모 데이터에 좋음, L2만 지원
    • liblinear: 좌표 하강법, 소규모 데이터에 빠름, L1과 L2 모두 지원
    • sag/saga: 확률적 평균 그래디언트, 대용량 데이터에 효율적, saga는 L1도 지원
  • max_iter: 최적화를 위한 최대 반복 횟수. 기본값은 100.
    • 알고리즘이 수렴하지 않을 때 강제 종료하는 기준
    • 복잡한 데이터나 작은 tol 값에서는 늘려야 할 수 있음
  • multi_class: 다중 클래스 분류 전략. 'auto', 'ovr', 'multinomial' 중 선택.
    • ovr (One-vs-Rest): 각 클래스를 나머지와 구분하는 이진 분류기들로 분해
    • multinomial: 다항 로지스틱 회귀로 직접 처리
    • auto: 데이터와 solver에 따라 자동 선택
  • verbose: 로그 출력 상세도.
    • 학습 과정의 상세 정보 출력 수준
    • 0: 출력 없음, 1 이상: 점진적으로 상세한 정보
  • warm_start: 이전 호출의 솔루션을 재사용하여 피팅을 초기화 여부. 기본값은 False.
    • 이전 학습 결과를 시작점으로 사용
    • 매개변수 튜닝이나 점진적 학습에 유용
  • n_jobs: 병렬 처리를 위한 CPU 코어 수. 기본값은 None (1개 코어 사용).
    • 병렬 처리 코어 수
    • -1로 설정하면 모든 코어 사용
from sklearn.linear_model import LogisticRegression

model = LogisticRegression(penalty='l2',       # L2 정규화 사용
                           C=0.5,              # 정규화 강도 (낮을수록 강한 정규화)
                           fit_intercept=True, # 절편을 포함
                           random_state=42,    # 결과 재현을 위한 난수 시드
                           solver='lbfgs',     # 최적화를 위한 알고리즘
                           max_iter=100,       # 최대 반복 횟수
                           multi_class='auto', # 다중 클래스 처리 방식
                           verbose=0,          # 로그 출력 정도 (0은 출력하지 않음)
                           n_jobs=1           # 사용할 CPU 코어 수 (1은 하나의 코어 사용)
)
profile
코딩 공부하는 사람

0개의 댓글