728x90
반응형
출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029
*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.
상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.
- 분석할 데이터를 불러와 검토한다.
import numpy as np
import pandas as pd
data = pd.read_csv('/breast-cancer-wisconsin.csv', encoding='utf-8')
data.head()
- 레이블 변수 비율을 확인하기 위해 빈도를 확인해본다.
- 정상이 444명, 유방암 환자가 239명이 나온다.
data['Class'].value_counts(sort=False)
- 다음으로 행과 열 구조 확인을 위해 shape 함수를 대입해본다.
print(data.shape)
- 10개까지는 특성, 마지막 1개는 레이블이다.
- 행 숫자를 기준으로 특성과 레이블을 분리하여 x와 y를 생성한다.
x = data[data.columns[1:10]]
y = data[["Class"]]
- 그 후 train_test_split 라이브러리를 사용해 학습 데이터와 검증 데이터를 구분한다.
- 이 때 stratify=y 파라미터를 주어 레이블의 범주를 비율에 맞게 구분한다.
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) # stratify=y : 레이블의 범주를 비율에 맞게
- stratify 파라미터가 잘 적용되었는지 확인하기 위해 비율을 확인한다.
# 비율 확인
print(y_train.mean())
print(y_test.mean())
- 비율이 알맞게 분배되어 있음을 확인했다면 정규화를 수행한다.
- 정규화는 민맥스정규화, 표준화 중 하나를 골라 수행한다.
from sklearn.preprocessing import MinMaxScaler, StandardScaler
scaler_minmax = MinMaxScaler()
scaler_stand = StandardScaler()
scaler_minmax.fit(x_train)
x_minmax_train = scaler_minmax.transform(x_train)
x_minmax_test = scaler_minmax.transform(x_test)
scaler_stand.fit(x_train)
x_stand_train = scaler_stand.transform(x_train)
x_stand_test = scaler_stand.transform(x_test)
- minmax 정규화의 경우 describe() 함수를 통해 min이 0, max가 1이 되었는지 확인한다.
pd.DataFrame(x_minmax_train).describe()
- 이제 minmax 정규화를 거친 데이터로 모델을 학습시키고 검증한다.
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(x_minmax_train, y_train)
print('MINMAX : TEST :', model.score(x_minmax_train, y_train))
model.predict(x_minmax_test)
print('MINMAX : TRAIN :', model.score(x_minmax_test, y_test))
- 정확도는 높게 나왔으니 오차 행렬을 확인한다.
- 오차 행렬은 confusion_matrix 라이브러리를 사용하면 쉽게 확인이 가능하다.
from sklearn.metrics import confusion_matrix
y_pred = model.predict(x_stand_test)
confusion_train = confusion_matrix(y_test, y_pred)
print("훈련 데이터 오차 행렬")
confusion_train
- 그리고 재현율, f1-score 등의 확인은 classification_report 라이브러리로 쉽게 구할 수 있다.
from sklearn.metrics import classification_report
cfreport_train = classification_report(y_test, y_pred)
print("분류 예측 레포트\n", cfreport_train)
- 다른 모델 평가 지표로 ROC를 사용할 수 있다.
- ROC는 FPR(거짓긍정율)과 TPR(참긍정율)의 구간별 비율로 변적을 구한다.
- 100%에 가까울 수록 좋은 모델임을 암시한다.
from sklearn.metrics import roc_curve, auc
from sklearn import metrics
false_positive_rate , true_positive_rate, thresholds = roc_curve(y_test, model.decision_function(x_minmax_test))
roc_auc = metrics.roc_auc_score(y_test, model.decision_function(x_minmax_test))
roc_auc
- ROC Curve를 가시화하고 싶다면 아래와 같이 구성하면 된다.
import matplotlib.pyplot as plt
plt.title('Receiver Operating Characteristic')
plt.xlabel('False Positive Rate(1 - Specificity')
plt.ylabel('True Positive Rate(Sensitivity')
plt.plot(false_positive_rate, true_positive_rate, 'b', label='Model (AUC = %0.2f) ' % roc_auc)
plt.plot([0, 1], [1, 1], 'y--')
plt.plot([0, 1], [0, 1], 'r--')
plt.legend(loc='lower right')
plt.show()
728x90
반응형
'자격증 > 빅데이터 분석기사 (실기)' 카테고리의 다른 글
03_03. 머신러닝 프로세스 (0) | 2022.06.04 |
---|---|
03_02. 회귀 (0) | 2022.06.04 |
03_머신러닝 프로세스 (0) | 2022.05.30 |
02_01. 데이터 정제 실전 과제 (0) | 2022.05.30 |
02_데이터 탐색과 데이터 정제 (0) | 2022.05.30 |