Python/Sklearn

[Sklearn] 파이썬 로지스틱 회귀분석 예제(사이킷런 유방암 데이터셋)

jimmy_AI 2022. 1. 12. 19:36
반응형

파이썬 사이킷런 로지스틱 회귀분석

이번 글에서는 사이킷런의 유방암 데이터셋을 활용하여,

로지스틱 회귀 모델을 학습시켜보고,

성능 평가까지 진행하는 예제를 간단히 살펴보도록 하겠습니다.

 

 

사이킷런 유방암 데이터셋 불러오기

유방암 데이터셋을 불러오고, 데이터프레임으로 만드는 예시 코드입니다.

총 30가지 종류의 feature가 있지만, 여기서는 대표적으로 4가지 feature만 사용하여

로지스틱 모델 학습을 진행해보도록 하겠습니다.

import pandas as pd
from sklearn import datasets

# 유방암 데이터셋 로드
data = datasets.load_breast_cancer()
df = pd.DataFrame(data.data, columns = data.feature_names)

# 일부 feature만 사용
df = df[['mean radius', 'mean texture', 'mean area', 'mean symmetry']]

# 1이면 양성 종양, 0이면 악성 종양 라벨 열 지정
df['target'] = data.target

df

만들어진 데이터프레임은 다음과 같습니다.

총 569 행의 데이터가 존재하며,

악성 종양(target = 0)은 212개, 양성 종양(target = 1)은 357개가 존재합니다.

 

양쪽 클래스 라벨의 개수가 다소 불일치하는 특징을 가지고 있어

원래는 균일하게 샘플링하는 과정 등이 필요하지만,

여기서는 feature selection이나 균등 샘플링 등 전처리 과정은 다루지 않도록 하겠습니다.

 

다만, 로지스틱 회귀 모델 학습을 위해서는 feature마다 scale 범위를 맞춰주는

정규화 과정이 필요하기에 아래와 같이 진행해주도록 하겠습니다.

from sklearn.preprocessing import MinMaxScaler

# 정규화 진행
scaler = MinMaxScaler()
df = scaler.fit_transform(df)

df = pd.DataFrame(df, columns = ['mean radius', 'mean texture', 'mean area', 'mean symmetry', 'target'])

 

이제 4가지 선별된 feature의 값을 기준으로 target이 0일지 1일지를 맞추어보는

로지스틱 회귀 모델을 학습해보겠습니다.

 

 

파이썬 로지스틱 회귀분석 모델 학습 : LogisticRegression

우선, 성능 평가를 위하여 train / test 데이터셋 분리를 먼저 진행하겠습니다.

테스트 데이터 셋의 비율은 20%로 하였습니다.

from sklearn.model_selection import train_test_split

# train, test 셋 분리
X = df[['mean radius', 'mean texture', 'mean area', 'mean symmetry']]
y = df['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

 

이제 train 데이터 셋을 기준으로, 로지스틱 회귀분석 모델을 학습하도록 하겠습니다.

여기서는 특별히 하이퍼 파라미터를 따로 설정하지는 않아보도록 하겠습니다.

from sklearn.linear_model import LogisticRegression

# 로지스틱 회귀 모델 학습
model = LogisticRegression(penalty = 'l2')
model.fit(X_train, y_train)
반응형

로지스틱 회귀분석 대표 하이퍼 파라미터 종류

사이킷런 로지스틱 회귀분석 함수인 LogisticRegression의 세부적인 사항을 결정하는

하이퍼 파라미터 종류 몇 가지를 소개하도록 하겠습니다.

하이퍼 파라미터 설정 여부에 따라 성능 및 학습 시간이 크게 달라질 수 있습니다.

 

penalty : 설정 가능 값 : 'l1', 'l2', 'elasticnet', 'none' , 기본 값 : 'l2'

1차, 2차, 1차+2차 혼합, 미규제 중에서 복잡한 모델에 대한 규제 방법을 선택

C : penalty에 대한 계수 설정, 기본 값은 1.0, 높을 수록 복잡한 모델에 대한 규제 강화


solver : 설정 가능 값 : ‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’ 기본 값 : 'lbfgs'

로지스틱 회귀는 비선형 방정식이라 근사 알고리즘으로 접근하는데, 알고리즘의 종류 선택

특정 solver는 일부 penalty 방식을 지원하지 않을 수도 있음

random_state : 실행 시마다 결과를 고정하고 싶다면 임의의 정수로 설정

근사 알고리즘의 초기 상태가 실행 시마다 달라질 수 있어서 생기는 원리

 

 

로지스틱 회귀분석 성능 평가

위에서 학습된 모델을 기준으로, test set 데이터에 대하여 target을 예측해보고,

실제 class와 일치하는 비율인 정확도를 통하여 성능 평가를 진행해보겠습니다.

from sklearn.metrics import accuracy_score

# 로지스틱 모델 학습 성능 비교
y_pred = model.predict(X_test) # 예측 결과 라벨

# 정확도 측정
accuracy_score(y_pred, y_test) # 0.9210526315789473

여기서는 약 92% 정도의 정확도가 측정되었습니다.

 

feature 종류 변경이나 하이퍼 파라미터의 값 조절 등의 과정이 이루어진다면,

더 높은 정확도에 도전도 가능합니다.