본문 바로가기
자격증/빅데이터 분석기사 (실기)

03_01. 분류

by 이민우 2022. 5. 30.
728x90
반응형

출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029 

 

공개적 빅데이터분석기사 실기

본 도서는 한국데이터산업진흥원에서 실시하는 빅데이터분석기사 국가기술자격 실기시험 대비 도서입니다.본 교재는 PYTHON을 활용하여 쉽고 빠른 자격증 취득으로 이어질 수 있도록 도움을 줄

book.naver.com

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.


데이터 출처 : https://www.kaggle.com/code/lottoexpecter/python-5-data-search-data-preprocessing/data?select=breast-cancer-wisconsin.csv 

 

 

  • 분석할 데이터를 불러와 검토한다.
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