자기계발/Python

[빅데이터분석기사] 13 로지스틱 회귀모델

호등 2022. 6. 20. 19:30
반응형

로지스틱 회귀분석

종속변수가 범주형 자료일 때 적용하는 회귀모델

주택소유여부같은 범주형 레이블은 예측함수를 만들기 어렵기 때문에 평균 소유 비율로 변환한다.

본래의 자료를 확률-> 오즈(odds) -> 로그(log)로 변환하여 선형회귀모델을 적용한 모델이라고 할 수 있다.

 

1) scikit-learn

LogisticRegression은 sklearn.linear_model 안에서 불러온다.

LogisticRegression의 하이퍼파라미터는 'C', 디폴트 값은 'C=1'이다.

하위 옵션 중 solver라는 옵션은 연산 속도와 관련된 주요 하이퍼파라미터이다.

데이터양이 수백~수십만 건인 경우 solver='sag'로 설정하면 평균경사하강법을 적용하여 속도를 향상시킬 수 있다.

 

2) 데이터 준비

import warnings
warnings.filterwarnings("ignore")

import pandas as pd

data=pd.read_csv('breast-cancer-wisconsin.csv', encoding='utf-8')
X=data[data.columns[1:10]]
y=data[["Class"]]

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

위스콘신 대학의 'breast-cancer-wisconsin.csv' 파일로 예측분류를 진행해본다.

특성치(X)와 레이블(y)로 데이터셋을 나누고, train_test_split으로 훈련, 테스트 데이터를 분리한다.

 

결과가 범주형 데이터이므로 stratify = y 옵션을 설정한다!

 

3) 정규화(Min-Max)

#min-max 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X_train)

X_scaled_train = scaler.transform(X_train)
X_scaled_test = scaler.transform(X_test)

sklearn.preprocesiing에서 MinMaxScaler 라이브러리를 불러와 정규화를 진행했다.

사용하기 편하도록 scaler에 MinMaxScaler()를 담아주었고, X_train 데이터로 fit 해주었음

 

4) 기본 모델 적용

#하이퍼파라미터 C=1(디폴트)로 분석
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_scaled_train, y_train)

pred_train = model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)

하이퍼파라미터 C=1인 기본 디폴트로 분석을 진행한다.

sklearn.linear_model에서 LogisticRegression 라이브러리를 불러와 model에 넣었다.

그 다음 정규화된 데이터 X_scaled_train와 y_train으로 fit 해준다.

 

예측치를 pred_train에 저장한 뒤 model.score로 정확도를 확인하는 과정

 

5) 혼동행렬과 다양한 평가 지표 확인

#혼동행렬
from sklearn.metrics import confusion_matrix
confusion_train = confusion_matrix(y_train, pred_train)
print("훈련데이터 오차행렬:\n", confusion_train)

#다양한 평가지표 확인
from sklearn.metrics import classification_report
cfreport_train = classification_report(y_train, pred_train)
print("분류예측 레포트 :\n", cfreport_train)

혼동행렬

sklearn.metrics에서 confusion_matrix 라이브러리를 불러온다.

 

다양한 평가지표 확인

sklearn.metrics에서 classification_report 라이브러리를 불러온다.

 

위 코드와 동일하게 test 데이터의 혼동행렬, 다양한 평가지표도 확인해주었다.

 

6) 하이퍼파라미터 조정(그리드탐색, 랜덤탐색)

#그리드탐색
param_grid = {'C' : [0.001, 0.01, 0.1, 1, 10, 100]}
from sklearn.model_selection import GridSearchCV

grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_scaled_train, y_train)

print("Best Parameter: {}".format(grid_search.best_params_))
print("Best Score: {:.4f}".format(grid_search.best_score_))
print("TestSet Score: {:4f}".format(grid_search.score(X_scaled_test, y_test)))


#랜덤탐색
from scipy.stats import randint
param_distribs = {'C' : randint(low=0.001, high=100)}
from sklearn.model_selection import RandomizedSearchCV

random_search = RandomizedSearchCV(LogisticRegression(), param_distributions=param_distribs, n_iter=100, cv=5)
random_search.fit(X_scaled_train, y_train)

print("Best Parameter: {}".format(random_search.best_params_))
print("Best Score: {:.4f}".format(random_search.best_score_))
print("TestSet Score: {:.4f}".format(random_search.score(X_scaled_test, y_test)))

그리드탐색은 sklearn.model_selection에서 GridSearchCV 라이브러리를,

랜덤탐색은 sklearn.model_selection에서 RandomizedSearchCV와 scipy.stats에서 randint 라이브러리를 불러온다.

반응형