[머신러닝 기초] 지도학습 - classification (Logistic Regression)
회귀를 통해서 회귀계수를 산출하게 되면, 회귀계수는 각 피쳐에 대한 설명력으로 이해할 수 있다.
y = 0.5x + 1 이라는 회귀식이 있다면, 'y를 예측하는데 x의 값이 0.5로 영향을 미치는 구나' 하고 말이다.
즉, x가 2->3으로 1증가를 하면 y는 0.5 상승하겠구나 라고 생각할 수 있다.
로지스틱 회귀는 회귀의 이러한 장점을 살린 분류 알고리즘이다.
로지스틱 회귀가 선형회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(sigmoid)함수 최적선을 찾고 이 시그모이드 함수의 반환값을 확률로 간주해 확률에 따라 분류를 결정하는 것이다.
로지스틱 회귀는 가볍고 빠르지만, 이진 분류 예측성능도 뛰어나다. 이 때문에 로지스틱 회귀를 이진 분류의 기본 모델로 사용하는 경우가 많다. 또한 로지스틱 회귀는 희소한 세트 분류에도 뛰어난 성능을 보여서 테스트 분류에서도 자주 사용한다.
회귀계수를 보고 해석하는 방법은 아래와 같다.
- 회귀계수가 양수면 label에 양의 상관관계를 갖는다.
- 회귀계수가 음수면 label에 음의 상관관계를 갖는다.
Sklearn API
이를 위해 sklearn에서는 API를 지원한다.
목적 | import | API |
Logistic Regression | from sklearn.linear_model import LogisticRegression | LogisticRegression() |
코드에서 보면,
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score
from sklearn.linear_model import LogisticRegression
cancer = load_breast_cancer()
# StandardScaler( )로 평균이 0, 분산 1로 데이터 분포도 변환
scaler = StandardScaler()
data_scaled = scaler.fit_transform(cancer.data)
X_train , X_test, y_train , y_test = train_test_split(data_scaled, cancer.target, test_size=0.3, random_state=0)
# 로지스틱 회귀를 이용하여 학습 및 예측 수행.
lr_clf = LogisticRegression()
lr_clf.fit(X_train, y_train)
lr_preds = lr_clf.predict(X_test)
# accuracy와 roc_auc 측정
print('accuracy: {:0.3f}'.format(accuracy_score(y_test, lr_preds)))
print('roc_auc: {:0.3f}'.format(roc_auc_score(y_test , lr_preds)))
ㅁ 실습
https://drive.google.com/file/d/1zqiBz6w0utNSBuYe2mCrjpTJrz43FTLM/view?usp=sharing
1) 그간 학습한 알고리즘을 모두 사용하여, 타이타닉 생존자 예측을 하고 가장 예측을 잘 하는 알고리즘을 선정해보자.
2) logistic regression의 회귀계수를 확인하고, 어떤 변수가 예측변수에 영향을 미치는지 확인하세요.
ㅁ 참고
p (확률) : 0~1
odds (승률) = p / (1-p) : 0~무한대
log(odds) = logit = 무한대~무한대
ㅁ Reference
- [책] 파이썬 머신러닝 완벽가이드
- [블로그] 파이썬 머신러닝 완벽가이드 정리본 (Link)
- [소스코드 출처] : https://github.com/wikibook/pymldg-rev