로지스틱 회귀모형(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
반응형
'머신러닝' 카테고리의 다른 글
Natural Cubic Spline (0) | 2021.03.09 |
---|---|
Piecewise Polynomial and Regression Splines (3) | 2021.03.02 |
선형 판별 분석(Linear Discriminant Analysis, LDA) > 차원축소 (0) | 2021.02.22 |
선형 판별 분석(Linear Discriminant Analysis, LDA) (0) | 2021.02.21 |
선형 분류 모형(Linear Methods for Classification) (0) | 2021.02.20 |