로지스틱 회귀분석 : 모 아니면 도
로지스틱 회귀는 선형 회귀 방식을 '분류'에 적용한 알고리즘이다. 쉽게 말하면 선형회귀 분석에서 Target 으로 잡는 데이터가 모 아니면 도라고 생각하면 이해하기 편하다. 예를 들면 종양 데이터를 근거로 종양인지(Y=1) 아닌지(N=0)를 판단하는 문제에 적용할 수 있다. 로지스틱 회귀는 시그모이드 함수를 기반으로 하는데 시그모이드 함수는 X 값이 아무리 커지거나 작아져도 1이나 0 값 만을 반환하는 함수이다.
로지스틱 회귀는 이처럼 선형 회귀 방식을 기반으로 하되 시그모이드 함수를 이용하여 '분류'를 수행하는 회귀이다. 지도학습의 대장인 '회귀'와 '분류'가 합쳐진 로직이다. 하지만 잊지 말자 로지스틱 회귀에서 '회귀'는 도구이고 '분류'가 목적이라는 점을!
[Step 1] 데이터 전처리 (Preprocessing)
사이킷런은 다양한 데이터셋을 제공하는데 오늘은 유방암 데이터를 분석해보도록 하겠다. 이 데이터의 경우는 타겟 데이터가 1, 0 으로 제공되어 있기 때문이다. 필요한 라이브러리를 가져오고 load_breast_cancer() 함수를 실행시켜 데이터를 가져온다.
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
cancer = load_breast_cancer()
데이터는 아래와 같이 저장되어 있다. feature_names 는 데이터의 피처(독립변수)를 의미하고 target 은 데이터의 타겟(종속변수)를 의미한다. 해당 데이터에 대한 설명은 DESCR 을 참고하면 된다.
판다스 데이터 프레임으로 이쁘게 만들어 주자. 데이터를 그대로 가져오면 컬럼에 피처이름이 전혀 안 적혀있다. 보기 쉽게 타겟 데이터도 컬럼으로 추가해준다. 왼쪽의 수많은 피처 데이터와 오른쪽에 타겟 데이터를 한 눈에 쉽게 볼 수 있다.
cancer_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
cancer_df['target'] = cancer.target
[Step 2] Train, Test 데이터 분류 후 학습
선형 회귀 계열의 로지스틱 회귀는 데이터의 정규 분포도에 따라 예측 성능 영향을 받을 수 있으므로 데이터에 먼저 정규 분포 형태의 표준 스케일링(Standard Scaler)을 적용해 보겠다. 아래 모든 피처 데이터들이 평균이 0, 분산이 1인 데이터로 이쁘게 변환되었다.
# StnadardScaler()로 평균이 0, 분산 1로 데이터 분포도 변환
scaler = StandardScaler()
data_scaled = scaler.fit_transform(cancer.data)
print(data_scaled)
print(cancer.target)
cancer_standardized_df = pd.DataFrame(data_scaled,columns=cancer.feature_names)
cancer_standardized_df['target'] = cancer.target
train_test_split 함수를 통해서 훈련데이터와 테스트 데이터를 분리한 후 모델을 학습시키고 X_test 를 넣어서 예측 값들을 출력해본다. 0번 인덱스는 0(N), 1번 인덱스는 1(Y)와 같은 방식으로 예측 값이 도출되었다.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data_scaled, cancer.target,
test_size=0.3, random_state=0)
# 로지스틱 회귀를 이용해 학습 및 예측 수행
lr_clf = LogisticRegression()
lr_clf.fit(X_train, y_train) # 학습
lr_preds = lr_clf.predict(X_test) # 예측
print(lr_preds)
[Step 3] 정확도 성능 평가
Accuracy 와 ROC_AUC 지표를 통해 예측의 성능이 얼마나 뛰어난지 평가해보자. Accuracy 는 97%, ROC_AUC도 97%의 예측률을 보여주고 있다.
from sklearn.metrics import accuracy_score, roc_auc_score
# 정확도와 roc_auc 측정
print('accuracy: {:0.3f}'.format(accuracy_score(y_test, lr_preds)))
print('roc_auc: {:0.3f}'.format(roc_auc_score(y_test, lr_preds)))
모 아니면 도를 판단하는 로지스틱 회귀분석은 간결하면서도 예측력이 높은 모델을 제공한다. 이론적인 내용은 추후에 다루어 보도록 하겠다. ^^
'데이터 분석 > 데이터 분석' 카테고리의 다른 글
직방에서 상가 크롤링하기 (B급 코딩) (0) | 2021.10.12 |
---|---|
[데이터 분석] 2021년 6월 서울아파트 갭투자 리스트 (2) | 2021.07.25 |
[데이터 분석] Ridge 회귀 분석 (0) | 2021.07.14 |
[데이터 분석] 선형회귀분석 Linear Regression (0) | 2021.07.13 |
[데이터 분석] ARIMA 모델을 활용한 CMA 잔고 분석 (0) | 2021.07.10 |
댓글