728x90

로지스틱 회귀분석 logistic regression

 

연속 적인 값을 예측하는 일반적인 회귀 분석과는 달리

 

0 또는 1로 분류하는 분류 추정기로

 

 

 

타겟 값이 0, 1만 주어진 문제에서

 

선형 모델을 사용하는 경우 예측률이 많이 떨어진다.

 

이 선형 모델을 로짓 변환을 통해 시그모이드 함수 형태로 바꾸어

 

0, 1을 다루는 문제를 더 잘 분류 할수 있도록 만든 회귀 모델이 로지스틱 회귀 모델

 

 

 

 

 

 

간단하게 유방암 데이터로 다뤄보자

 

우선 라이브러리 임포트

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score, roc_auc_score
import pandas as pd
import numpy as np

 

 

 

데이터를 표준화 시킨 후

 

간단하게 정확도와 roc auc 스코어를 보면

cancer = load_breast_cancer()
df = pd.DataFrame(data=cancer.data, columns=cancer.feature_names)
scaled_df = StandardScaler().fit_transform(df)

X_train, X_test, y_train, y_test = train_test_split(scaled_df, cancer.target, test_size=0.2)

lr = LogisticRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)

print("acc : {0:.3f}".format(accuracy_score(y_test, y_pred)))
print("roc auc : {0:.3f}".format(roc_auc_score(y_test, y_pred)))

 

 

로지스틱 회귀 모델도 L2, L1 규제를 파라미터로 받는데 이 규제 파라미터와

 

알파 값을 조절하는 파라미터 C = 1/alpha를 조절하여 최적 하이퍼파라미터 탐색

 

 

C = 1 -> alpha = 1이고, L2 규제를 했을때 0.980686으로 최적의 성능이 나옴. 

params = {
    "penalty" : ["l2", "l1"],
    "C" : [0.01, 0.1, 1, 5, 10]
}

lr = LogisticRegression()
gs = GridSearchCV(lr, param_grid=params, cv=5, n_jobs=-1, scoring="accuracy")
gs.fit(scaled_df, cancer.target)
print("best param : {}".format(gs.best_params_))
print("best acc : {}".format(gs.best_score_))
300x250

+ Recent posts