본문 바로가기
AI/Machine-Learning

[sklearn] LogisticRegression

by Wikinist 2023. 8. 29.

LogisticRegression은 scikit-learn 라이브러리에서 제공되는 기계 학습 모델 중 하나로, 주로 이진 분류 문제에 사용되는 선형 분류 알고리즘입니다. 이 모델은 로지스틱 함수를 사용하여 입력 특성과 클래스 간의 관계를 모델링하며, 확률 기반의 접근을 통해 샘플이 특정 클래스에 속할 확률을 추정합니다. 주로 두 개의 클래스 중 하나를 예측하는 이진 분류 문제에 적용되지만, 다중 클래스 문제에도 일반화할 수 있는 방법들이 있습니다.

LogisticRegression 클래스의 주요 메서드는 다음과 같습니다:

주요 메서드

fit(X, y): 모델을 입력 데이터 X와 대상값 y에 맞게 훈련합니다.
predict(X): 입력 데이터 X에 대한 예측을 수행합니다.
predict_proba(X): 입력 데이터 X에 대한 클래스별 확률을 반환합니다.
score(X, y): 입력 데이터 X와 대상값 y에 대한 정확도를 반환합니다.

LogisticRegression 클래스 생성자 파라미터

penalty (기본값: 'l2')

규제 항의 종류를 지정합니다.
'l1': L1 규제 (Lasso)
'l2': L2 규제 (Ridge)
'elasticnet': L1과 L2 규제의 혼합
'none': 규제를 적용하지 않음

dual (기본값: False)

이중 문제(dual problem)를 풀 것인지 여부를 나타냅니다.
일반적으로 샘플 수(n_samples)가 특성 수(n_features)보다 큰 경우에는 dual problem을 풀 수 있습니다.

tol (기본값: 1e-4)

반복 최적화의 종료 조건으로 사용되는 허용 오차입니다. 작은 값일수록 반복이 더 많이 진행됩니다.

C (기본값: 1.0)

규제 강도의 역수를 나타냅니다.
값이 작을수록 강한 규제가 적용됩니다.

fit_intercept (기본값: True)

절편(intercept)을 학습할 것인지 여부를 결정합니다.
False로 설정하면 절편이 0으로 고정됩니다.

intercept_scaling (기본값: 1)

절편의 스케일링을 위한 값입니다.

class_weight (기본값: None)

클래스 가중치를 설정합니다.
'balanced': 클래스의 빈도에 반비례하는 가중치를 부여합니다.
사용자 정의 가중치 딕셔너리를 제공할 수도 있습니다.

random_state (기본값: None)

난수 발생을 위한 시드(seed) 값을 설정합니다.

solver (기본값: 'lbfgs')

최적화 알고리즘을 선택합니다.
'newton-cg': Netwon's conjugate gradient 알고리즘
'lbfgs': Limited-memory Broyden–Fletcher–Goldfarb–Shanno 알고리즘
'liblinear': Library for Large Linear Classification
'sag': Stochastic Average Gradient descent 알고리즘
'saga': SAGA 알고리즘 (L1 규제와 함께 사용 가능)

max_iter (기본값: 100)

최대 반복 횟수를 설정합니다.

multi_class (기본값: 'auto')

다중 클래스 문제에 대한 처리 방식을 설정합니다.
'auto': 자동으로 다중 클래스 설정을 결정합니다.
'ovr': One-vs-Rest 방식
'multinomial': Softmax를 사용하는 다중 클래스 방식

verbose (기본값: 0)

출력 메시지의 상세도를 조절합니다.

warm_start (기본값: False)

True로 설정하면 이전 호출의 솔루션을 재사용하여 훈련을 계속할 수 있습니다.

n_jobs (기본값: None)

병렬 작업에 사용할 CPU 코어의 개수를 설정합니다.

l1_ratio (기본값: None)

Elastic-Net 규제에서 L1 비율을 설정합니다. (0에서 1 사이의 값)
이 외에도 몇 가지 추가적인 매개변수가 있을 수 있으며, 이 매개변수들은 모델의 설정을 조정하여 원하는 결과를 얻을 수 있도록 도와줍니다.

예제

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 데이터 준비
X = np.array([2, 3, 4, 5, 6, 7, 8, 9]).reshape(-1, 1)
y = np.array([0, 0, 0, 1, 0, 1, 1, 1])

# 훈련 데이터와 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

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

# 모델 훈련
model.fit(X_train, y_train)

# 테스트 데이터에 대한 예측
y_pred = model.predict(X_test)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")


이 코드는 주어진 데이터셋을 사용하여 로지스틱 회귀 모델을 생성하고 훈련시킨 후, 테스트 데이터에 대한 정확도를 평가합니다. 위 코드를 실행하면 테스트 데이터에 대한 정확도가 출력됩니다. 이 예제는 단순히 간단한 로지스틱 회귀 모델을 구현하는 방법을 보여주기 위한 것이며, 실제로는 더 복잡한 데이터와 모델을 다룰 때 더 많은 전처리와 튜닝이 필요할 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.