개요
로지스틱 회귀는, 일반 선형회귀와는 성격이 다르다.
선형회귀는 결과가 연속형일때 사용한다면, 로지스틱 회귀는 결과가 범주형일 때 사용한다.
즉, 분류 문제를 푸는데 회귀의 모델을 사용하는 것이 로지스틱 회귀이다.
그런데, 왜 별도의 모델을 만든 것인가?
이진 분류 문제만을 고려한다면, 결과값은 0 -1 로 나올 것이다. 선형 회귀로는 Fitting이 어렵다.
따라서, 곡선을 사용하여 Fitting하게 된다.
오즈비와 로짓변환
로지스틱 회귀 모델에서는, 결과값을 확률의 형태로 얻게 되고 이를 활용하여 로지스틱 함수를 얻어낸다.
로지스틱 함수는 다음과 같이 정의한다.(정확하게는, 시그모이드 함수라고 부른다)
여기서 중요한 점은, 아무튼 이진 분류이므로 결과값이 0, 1 형태로 얻어내야 하는데 x값의 범위는 실수 전체의 범위이다. 따라서, 선형회귀 식을 잘 변환해야 할 것인데, 이 과정을 로짓 변환이라고 한다.
1. 오즈비 : 양성으로 분류될 확률은 음성으로 분류될 확률보다 얼마나 더 높은가를 나타낸다. 이를 식으로 표현한다.
이 값은 양성 샘플로 분류될 확률이 적을 수록 0에 가까워지고, 커질수록 무한대에 가까워진다.
2. 로짓 : 오즈비에 로그 함수를 취하여 로짓 함수를 정의한다.
이렇게 하면, 로짓의 값은 실수 전 범위내에서 값을 가지게 된다.
3. 로짓의 결과 값이, 선형 회귀의 식이 된다.
예시로 독립변수가 1개인 상황을 보면 다음과 같다.
이 식을, p에 대해 정리를 해보면 다음과 같다.
!! 위에서 본 식의 형태를 얻게 되며, 이 값은 0에서 1 사이의 값을 가지게 된다.
즉, 우리는 이 과정을 통해 입력 데이터에 따른 결과의 확률을 얻게 된 것이다. 이를 바탕으로 분류를 하게 된다.
이제 이 값이 0.5 이상인 경우는 양성, 0.5 미만인 경우는 음성으로 분류하면 된다.
예시
유방암 데이터를 통한 Logistic Regression 실습
Step1. 데이터셋 로드 및 train set - test set 분류
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target)
Step2. 로지스틱 회귀 및 분류의 정확도 검증
from sklearn.linear_model import LogisticRegression # 로지스틱회귀
from sklearn.metrics import accuracy_score # 분류 정확도 추출
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
y_pred = log_reg.predict(X_test)
print(accuracy_score(y_test, y_pred))
Step3. Confusion Matrix 계산
# Confusion Matrix 추출
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
Step4. Confusion Matrix의 시각화
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(cm, annot=True, annot_kws={"size": 20})
plt.xlabel('Predicted', fontsize=20)
plt.ylabel('Actual', fontsize=20)
'Archive > 데이터 분석 관련' 카테고리의 다른 글
[Data] GridSearchCV (0) | 2021.06.14 |
---|---|
[Data] 분류 알고리즘 - Decision Tree, Random Forest (0) | 2021.06.01 |
[Data] Scikit-learn을 통한 Pipeline 구축 (0) | 2021.06.01 |
[Data] p-value Revisited, p-hacking이란? (0) | 2021.05.27 |
[Data] 분류의 성능평가 - Confusion Matrix (0) | 2021.05.18 |