-
Logistic Regression기계학습이론과실습 2022. 4. 18. 17:50
Logistic Regression을 이해하기 위해서는 먼저 최대우도추정법(Maximum Likelihood Estmiation: MLE)을 이해할 필요가 있다.
"우도(Likelihood)란 확률 분포의 모수가, 어떤 확률변수의 표집값과 일관되는 정도를 나타내는 값이다."
라고 위키백과에서는 설명하고 있다.
우도는 확률과의 비교를 통해서 비교적 명확하게 이해할 수 있다.
- 확률이란 고정된 확률분포 내에서 특정 관측값 혹은 관측구간이 나타나는 것에 대한 기댓값이다.
- 우도는 고정된 관측값이 특정 확률분포 내에서 나타나는 것에 대한 기댓값이다.
우도를 최대로 하는 확률분포를 찾고, 그 확률분포를 통해서 새로운 관측치의 종속변수를 예측하는 것이 기계학습에서 이루고자 하는 바이다.
- 확률질량함수의 모수 θ에 대해 우도 L(θ) = P(Y1=y1, Y2=y2 ··· Yn=yn; θ)
해당 결합함수에서 각 관측치가 서로 독립일 경우 L(θ) = P(Y1=y1)P(Y2=y2)···P(Yn=yn)
∴ L(θ) = $\pi_{i=1}^n$ P(Yi=yi) - 확률밀도함수의 모수 θ에 대해 우도 L(θ) = f(Y1=y1, Y2=y2 ··· Yn=yn; θ)
해당 결합함수에서 각 관측치가 서로 독립일 경우 L(θ) = f(Y1=y1)f(Y2=y2)···f(Yn=yn)
∴ L(θ) = $\pi_{i=1}^n$ f(Yi=yi)
여기서 확률분포함수가 이항 분포 함수라고 가정하면, P(y) = p^y·(1-p)^(1-y)이므로
lnL(P) = ln $\pi_{i=1}^n$ P^Yi·(1-P)^(1-Yi)
= $\sum_{i=1}^n$ [Yi·lnP + (1-Yi)·ln(1-P)]그런데, Maximization Problem을 푸는 것보다 Minimization Problem을 푸는 것이 더 쉬우므로
Cost Function = -lnL(P) = -$\sum_{i=1}^n$ [Yi·lnP + (1-Yi)·ln(1-P)]
where P(Y=1) = 1/(1+e^-z) where z = bo + b1x1 + b2x2 + ··· bkxk
# Logistic Regression Base
from sklearn.linear_model import LogisticRegression
lr_base = LogisticRegression(penalty='none')
lr_base.fit(X_train, y_train)
lr_base.score(X_test, y_test)
0.9
# Logistic Regression Regularization
lr_p1 = LogisticRegression(C=0.1, penalty='l1', solver = 'saga', max_iter=1000)
lr_p1.fit(X_train, y_train)
lr_p1.score(X_test, y_test)
# Check model performance
from sklearn.metrics import accuracy_score
y_predictions = lr_base.predict(X_test)
accuracy_score(y_test, y_predictions)0.9
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_predictions)array([[10, 0], [ 3, 17]], dtype=int64)
from sklearn.metrics import classification_report
print(classification_report(y_test, y_predictions))precision recall f1-score support 0 0.77 1.00 0.87 10 1 1.00 0.85 0.92 20 accuracy 0.90 30 macro avg 0.88 0.93 0.89 30 weighted avg 0.92 0.90 0.90 30
y_prob = lr_base.predict_proba(X_test)
from sklearn.metrics import roc_auc_score
auc_score1 = roc_auc_score(y_test, y_prob[:,1])print(auc_score1)
0.9688888888888889
* ROC 그리는 법은 해당 jupyter notebook 참조
'기계학습이론과실습' 카테고리의 다른 글
Course Intro (0) 2022.05.04 Naive Bayes (0) 2022.05.03 Document Classification (0) 2022.04.25 Imbalanced Classification (0) 2022.04.25 Hyper-parameter Tuning (0) 2022.04.20