Allen's 데이터 맛집

[머신러닝]분류 : 로지스틱 회귀(LogisticRegression)란? 본문

Machine Learning/머신러닝

[머신러닝]분류 : 로지스틱 회귀(LogisticRegression)란?

Allen93 2023. 8. 30. 18:27

로지스틱 회귀: 데이터에서 패턴을 찾는 마법 같은 모델


로지스틱 회귀는 데이터에서 어떤 패턴을 찾아내고, 그 패턴을 활용하여 미래의 상황을 예측하는 분류 모델입니다. 이 모델은 물론 회귀라는 이름이 붙어 있지만, 실제로는 주로 분류 작업에 사용됩니다.

 


로지스틱 회귀의 특징


이름 헷갈리지 말기! '로지스틱 회귀'라는 이름은 회귀라는 단어가 들어가지만, 실제로는 데이터의 분류 작업에 사용됩니다. 미래에 무엇이 발생활 지를 예측하는 것이 아니라, 어떤 분류에 속하는지를 예측하는 모델입니다.

0과 1 사이의 확률로 생각하기! 로지스틱 회귀는 예측 결과를 0과 1 사이의 값으로 변환합니다. 이 값을 확률로 해석하여, 어떤 클래스에 속할 가능성이 더 높은 지를 알 수 있습니다.

S자 형태의 곡선을 그리기! 로지스틱 회귀의 모양은 S자 형태의 곡선을 그립니다. 이 곡선은 데이터의 패턴을 잘 반영하면서도 예측 결과를 확률로 표현할 수 있도록 도와줍니다.

 


로지스틱 회귀의 예


이메일 스팸 분류: 이메일이 스팸인지 아닌지 예측할 때 로지스틱 회귀를 사용할 수 있습니다. 모델은 이메일의 내용을 분석하여 스팸 여부를 확률로 예측하고, 특정 임계값을 기준으로 스팸 또는 정상 이메일로 분류합니다.

의료 진단: 환자의 의료 정보를 기반으로 로지스틱 회귀 모델을 만들어 특정 질병에 걸릴 확률을 예측할 수 있습니다. 이를 통해 조기 진단과 예방 조치를 취할 수 있습니다.

신용 승인 결정: 개인의 신용 정보를 분석하여 대출 승인 여부를 예측할 때 로지스틱 회귀를 활용할 수 있습니다. 이를 통해 금융 기관은 신용 위험을 최소화하면서도 고객에게 대출을 제공할 수 있습니다.

로지스틱 회귀는 간단하면서도 매우 유용한 분류 모델입니다.

 

Linear Regression and Logistic Regression

 

아래는 간단하게 로지스틱 회귀 모델을 사용하여 이메일 스팸 여부를 예측하는 코드입니다.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 데이터 준비
data = {
    'word_count': [25, 30, 15, 40, 10, 8, 50, 5, 32, 20],
    'spam': [1, 1, 0, 1, 0, 0, 1, 0, 1, 0]  # 1: 스팸, 0: 정상
}

df = pd.DataFrame(data)

# 데이터 분할
X = df[['word_count']]
y = df['spam']
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("모델 정확도:", accuracy)
  • max_iter, tol 등을 변경하여 성능을 개선할 수 있음
  • max_iter : 반복 횟수
  • tol : 허용오차, 반복을 중단하는 조건으로 사용됨
  • penalty : penalty 종류
  • C : panalty 세기
  • (penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)