상세 컨텐츠

본문 제목

[빅데이터 분석] 11. 머신러닝 분류 분석

[SW]/빅데이터 (2023) (완)

by 시원00 2023. 7. 25. 14:19

본문

728x90

project11. 특정 데이터로 유방암 진단하기

  1. 핵심 개념: 로지스틱 회귀, 시그모이드 함수, 성능 평가 지표, 오차 행렬, 정밀도, 재현율, F1 스코어, ROC 기반 AUC 스코어
  2. 데이터 수집: 유방암 진단 데이터: 사이킷런 내장 데이터셋
  3. 데이터 준비 및 탐색
    • 사이킷런 데이터셋 확인
    • 사이킷런 데이터셋에 지정된 X 피처와 타깃 피처 결합
    • 로지스틱 회귀 분석을 위해 X 피처 값을 정규 분포 형태로 스케일링
  4. 분석 모델 구축: 사이킷런의 로지스틱 회귀 모델 구축
  5. 결과 분석: 성능 평가 지표 계산, ROC 기반 AUC 스코어 시각화

 

 

1. 핵심 개념 이해

 

분류: 대표적인 지도 학습 유형의 머신러닝 기법

- 데이터에 주어진 클래스 값을 학습

- 각 클래스를 구별할 수 있는 패턴을 찾아 학습 모델 생성

- 새로운 데이터에 대한 클래스를 예측 및 분류

 

로지스틱 회귀

- 선형 회귀: 선형 함수를 사용하여 추세를 예측

- 로지스틱 회귀: S자 함수를 사용하여 참(True, 1)과 거짓(False, 0)을 분류

- S자 함수 방정식 (시그모이드 함수)

     x값이 작아지면 y값이 0에 가까워지게 되고, x값이 커지면 y값은 1에 가까워져 S자 형태의 그래프가 된다.

     y = 1 / (1+e^(ax+b))

 

로지스틱 회귀 모델의 성능 평가 지표

- 선형 회귀

     실제값과 예측값이 오차에 기반한 지표

- 로지스틱 회귀

     오차 행렬에 기반한 성능 지표인 정밀도, 재현율, F1 스코어, ROC_AUC를 사용

     오차 행렬

     TN: Negative가 참인 경우    FP: Positive가 참인 경우

     FN: Negative가 거짓인 경우    TP: Positive가 참인 경우

     사이킷런 제공 함수: confusion_matrix()

     정확도 = 예측 결과와 실제값이 동일한 건수 / 전체 데이터 수 = (TN+TP) / (TN+FP+FN+TP)

 

     정밀도 

     | TP / (FP + TP)

     | 예측이 Positive인 것(FP+TP) 중에서, 참인 것(TP)의 비율을 의미

     | 정밀도는 Positive 예측 성능을 더 정밀하게 평가하기 위한 지표로 사용

     | 사이킷런 제공 함수: precision_score()

 

     재현율

     | TP / (FN + TP)

     | 실제값이 Positive인 것(FN+TP) 중에서 참인 것(TP)의 비율을 의미

     | 실제 Positive인 데이터를 정확히 예측했는지 평가하는 지표 (민감도 또는 TPR)

     | 사이킷런 제공 함수: recall_score()

 

     F1 스코어

     | 2 / ((1/재현율) + (1/정밀도)) = 2 * 정밀도 * 재현율 / (정밀도 + 재현율)

     | 정밀도와 재현율의 가중조화평균

     | 정확한 평가를 위해 많이 사용

     | 사이킷런 제공 함수: f1_score()

 

     ROC 기반 AUC 스코어

     | Receiver Operation characteristic Curve - Area Under Curve

     | 오차 행렬의 FPR이 변할 때 TPR이 어떻게 변하는지를 나타내는 곡선

     | FPR: 실제 Negative인 데이터를 Positive로 False 예측한 비율 (실제 N 중에서 P라고 예측해서 실패한 경우)

          FP / (FP + TN)

     | TPR: 실제 Positive인 데이터를 True로 예측한 비율 (재현율) (실제 P 중에서 P라고 예측해서 성공한 경우)

          TP / (FN + TP)

     | ROC 기반의 AUC 값은 ROC 곡선 밑의 면적을 구한 것으로 1에 가까울수록 좋은 성능을 의미

     | 사이킷런 제공함수: roc_auc_score()

 

성능 평가 지표 한 눈에 보기

 

 

2. 데이터 수집

- 사이킷런에서 제공하는 유방암 진단 데이터셋 사용

#데이터 수집
!pip install sklearn #사이킷런 설치
import numpy as np
import pandas as pd

from sklearn.datasets import load_breast_cancer
b_cancer = load_breast_cancer()
print(b_cancer.DESCR) #데이터셋 설명 확인

Out:

 

 

3. 데이터 준비 및 탐색

- 데이터 탐색

#데이터 탐색
b_cancer_df = pd.DataFrame(b_cancer.data, columns=b_cancer.feature_names)
b_cancer_df['diagnosis'] = b_cancer.target
b_cancer_df.head()

Out:

print('유방암 진단 데이터셋 크기: ', b_cancer_df.shape)
b_cancer_df.info()

Out:

 

- 데이터 준비: 로지스틱 회귀 분석에 사용될 데이터 정규화

     평균이 0, 분산이 1이 되는 정규 분포 형태로 변형

#데이터 준비

from sklearn.preprocessing import StandardScaler
#사이킷런의 전처리 패키지에 있는 정규 분포 스케일러 import

scaler = StandardScaler()
b_cancer_scaled = scaler.fit_transform(b_cancer.data)
print(b_cancer_scaled[0])

print(b_cancer.data[0]) #다시 확인 (b_cancer_data[0])
#print(b_cancer_scaled[0])

Out:

 

 

4. 분석 모델 구축

- 로지스틱 회귀를 이용해 분석 모델 구축

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# X, Y 설정하기
Y = b_cancer_df['diagnosis']
X = b_cancer_scaled
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
#훈련용 데이터와 평가용 데이터 분할하기

lr_b_cancer = LogisticRegression() #로지스틱 회귀 분석: (1) 모델 생성
lr_b_cancer.fit(X_train, Y_train) #로지스틱 회귀 분석: (2) 모델 훈련
Y_predict = lr_b_cancer.predict(X_test)
# 로지스틱 회귀 분석: (3) 평가 데이터에 대한 예측 수행 -> 예측 결과 Y_predict 구하기

 

 

5. 결과 분석

- 생성 모델 성능 확인

from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score

confusion_matrix(Y_test, Y_predict) #오차 행렬

Out:

accuracy = accuracy_score(Y_test, Y_predict)
precision = precision_score(Y_test, Y_predict)
recall = recall_score(Y_test, Y_predict)
f1 = f1_score(Y_test, Y_predict)
roc_auc = roc_auc_score(Y_test, Y_predict)

print('정확도: {0:.3f}, 정밀도: {1:.3f}, 재현율: {2:.3f}, F1: {3:.3f}'.format(accuracy, precision, recall, f1))
print('ROC_AUC: {0:.3f}'.format(roc_auc))

Out:

 

- ROC 기반 AUC 스코어 시각화

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc

Y_score = lr_b_cancer.predict_proba(X_test)[:, 1] #검증 데이터가 클래스 1에 속하는지 확인
fpr, tpr, thresholds = roc_curve(y_true=Y_test, y_score=Y_score)

plt.plot(fpr, tpr, label='roc curve (area = %0.3f)' %auc(fpr, tpr))
plt.plot([0,1], [0,1], linestyle='--', label='random')
plt.plot([0,0,1], [0,1,1], linestyle='--', label='ideal')
plt.legend()
plt.xlabel('false positive rate')
plt.ylabel('true positive rate')
plt.show()

Out:

 

 

FIN.

728x90

관련글 더보기

댓글 영역