로지스틱 회귀모형(Logistic Regression)

2021. 2. 23. 22:40머신러닝

반응형

로지스틱 회귀모형은 Classfication을 위해 가장 많이 적용되고 있는 방법론일 것입니다. 특히 계량경제학 관점에서 추정되는 Parameter에 대한 통계적 검증 및 해석이 가능하기 때문에 실무에서도 많이 활용 되고 있습니다.

로지스틱 함수는 비선형 함수이나, 아래와 같이 log-odd로 나타냄으로써 Input X에 대해 선형으로 분류할 수 있습니다.

$P(G=K|X=x)$의 경우에는 마지막 Class K를 제외하고 다른 Class에 속한 확률을 모두 더한 후 1에서 빼주면 구할 수 있습니다. 따라서 위의 식을 정리하면 아래와 같이 확률 모형을 나타낼 수 있습니다.

 Logistic regression의 경우에는 주로 maximun likelihood를 이용하여 모형을 fitting하며, log-likelihood function은 아래와 같습니다.

이제 우리가 해야하는 것은 $\beta$를 구하는 것입니다. Class가 2개만 있다고 가정했을 때 위 log-likelihood function은 다음과 같이 나타낼 수 있습니다.

 $\beta$에 대해서 미분한 결과는 다음과 같으며, 미분한 값이 0이 되게하는 $\beta$를 찾으면 됩니다.

다만 해당 함수는 명시적인 해가 존재하지 않음으로 Newton`s method와 같은 수치해석 알고리즘을 활용하여 해를 도출합니다.

이제 Python sklearn을 활용하여 실습을 해보겠습니다.

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import confusion_matrix
import pandas as pd
import numpy as np

## Data Loading
iris = load_iris()
iris

X= pd.DataFrame(iris.data)
Y= pd.DataFrame(iris.target)

## Train/Test Set

np.random.seed(7)

train_idx = np.random.choice(len(X), size = int(len(X)*0.7), replace=False
X_train = X.iloc[train_idx]
Y_train = Y.iloc[train_idx].values.reshape(len(Y_train),)

test_idx = [i for i in X.index if i not in train_idx]
X_test =X.iloc[test_idx]
Y_test =Y.iloc[test_idx].values.reshape(len(Y_test),)

##Logistic Regression Fitting
logit = LogisticRegression(multi_class = "multinomial")
logit.fit(X_train, Y_train)

## Train set accuracy
sum(logit.predict(X_train)==Y_train)/len(X_train) ##0.98
confusion_matrix(Y_train,logit.predict(X_train))

## Test set accuracy
sum(logit.predict(X_test)==Y_test)/len(X_test)
confusion_matrix(Y_test,logit.predict(X_test)) ##0.95

반응형