ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logistic Regression
    기계학습이론과실습 2022. 4. 18. 17:50

    Logistic Regression을 이해하기 위해서는 먼저 최대우도추정법(Maximum Likelihood Estmiation: MLE)을 이해할 필요가 있다.

     

    "우도(Likelihood)란 확률 분포의 모수가, 어떤 확률변수의 표집값과 일관되는 정도를 나타내는 값이다."

    라고 위키백과에서는 설명하고 있다.

     

    우도는 확률과의 비교를 통해서 비교적 명확하게 이해할 수 있다.

     

    • 확률이란 고정된 확률분포 내에서 특정 관측값 혹은 관측구간이 나타나는 것에 대한 기댓값이다.
    • 우도는 고정된 관측값이 특정 확률분포 내에서 나타나는 것에 대한 기댓값이다.

     

    우도를 최대로 하는 확률분포를 찾고, 그 확률분포를 통해서 새로운 관측치의 종속변수를 예측하는 것이 기계학습에서 이루고자 하는 바이다. 

     

      1. 확률질량함수의 모수 θ에 대해 우도 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) 
      2. 확률밀도함수의 모수 θ에 대해 우도 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

    댓글

Designed by Tistory.