로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘입니다. 즉, 로지스틱 회귀는 분류에 사용됩니다. 로지스틱 회귀 역시 선형 회귀 계열입니다. 회귀가 선형인가 비선형인가는 독립변수가 아닌 가중치(weight) 변수가 선형인지 아닌지를 따릅니다.
로지스틱 회귀가 선형 회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(Sigmoid) 함수 최적선을 찾고 이 시그모이드 함수의 반환 값의 확률에 따라 분류를 결정한다는 것입니다.
많은 자연, 사회 현상에서 특정 변수의 확률 값은 선형이 아니라 위의 시그모이드 함수와 같이 S자 커브 형태를 가지게 됩니다. 만약 1이 Yes이고 0이 No를 나타내는 데이타값이 있다면 회귀를 적용하면 데이터가 모여 있는 곳으로 선형 회귀 선을 그릴 수 있습니다.
하지만 이 회귀 라인은 0과 1을 제대로 분류하지 못하고 있습니다. 하지만 시그모이드를 통한 S자 커브 형태라면 좀 더 정확하게 0과 1에 대해 분류를 할 수 있음을 알 수 있습니다.
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score
from sklearn.model_selection import GridSearchCV
cancer = load_breast_cancer()
sclar = StandardScaler()
data_scled = sclar.fit_transform(cancer.data)
X_train, X_test, y_train, y_test = train_test_split(data_scled, cancer.target, test_size=0.3, random_state=0)
lr_clf = LogisticRegression()
lr_clf.fit(X_train, y_train)
lr_pred = lr_clf.predict(X_test)
print('accuracy_score\n', accuracy_score(y_test, lr_pred))
print('roc_auc_score\n', roc_auc_score(y_test, lr_pred))
선형 회귀 계열의 로지스틱 회귀는 데이터의 정규 분포도에 따라 예측 성능에 영향을 받을 수 있으므로 데이터에 먼저 정규 분포 형태의 표준 스케일링을 적용한 뒤에 train_test_split을 하는게 좋습니다.
accuracy_score
0.9766081871345029
roc_auc_score
0.9715608465608465
정확도와 ROC-AUC값은 상기와 같이 예측이 됩니다.
LogisticRegression 클래스의 주요 하이퍼파라미터로 penalty와 C가 있습니다. penalty는 규제(Regulation)의 유형을 설정하며 L2혹은 L1을 설정하면 됩니다. C는 규제의 강도를 조절하는 alpha값의 역수로 값이 작을수록 규제 강도가 크게 됩니다.
GridSearchCV를 통해 최적의 하이퍼파라미터를 추정해 봅니다.
params={'penalty': ['l2'],
'C': [0.01, 0.1, 1, 1, 5, 10]}
grid_clf = GridSearchCV(lr_clf, param_grid=params, scoring='accuracy', cv=3)
grid_clf.fit(data_scled, cancer.target)
print(grid_clf.best_params_, grid_clf.best_score_)
{'C': 1, 'penalty': 'l2'} 0.975392184164114
'ML with SckitLearn' 카테고리의 다른 글
K-Means 알고리즘의 원리와 이해 한판에 배워보기 (0) | 2020.12.05 |
---|---|
머신러닝, 클러스터 가우시안 가상데이터 생성하는 make_blobs를 이용한 K-means 실습 (Elbow Method 사용) (0) | 2020.12.03 |
Light GBM(LGBM)의 개요와 파라미터 정의에 대해 (0) | 2020.11.19 |
Faiss를 이용한 K-means구현 [사이킷런에 비해 8X 빠르고, 27X 적은 에러 구현] (0) | 2020.11.14 |
라쏘 / 엘라스틱넷 회귀 : Lasso / ElasticNet Model 이란? Scikit Learn에서의 실습 (0) | 2020.10.24 |
릿지 회귀 : Ridge Model 이란? Scikit Learn에서의 실습 (0) | 2020.10.24 |
Regulation(규제) 선형 모델에 대한 개요 - 릿지(Ridge), 라쏘(Lasso), 엘라스틱(Elastic Net) (0) | 2020.10.20 |
train_test_split()의 사용과 교차 검증 cross_val_score 이용하기 (0) | 2020.10.18 |