ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [로지스틱 회귀 분석] 특징데이터로 유방암 진단하기
    DataAnalysis/모델 분석 2022. 6. 1. 01:06

    <개념>

     

    1. 로지스틱 회귀

    -선형 회귀 방식을 참/거짓의 이진 분류에 적용한 기법

    -분류에 사용하는기법 으로 선형회귀와달리 S자함수를사 용하여 참(True, 1)과 거짓(False, 0)을 분류

    -로지스틱 회귀 모델은 이진 분류 결과를 평가하기 위해 오차 행렬에 기반한 성능 지표인 정밀도, 재현율, F1 스코어,ROC_AUC를 사용

     

    2. 시그모이드 함수

    -로지스틱 회귀에서 사용하는 S자 함수

    -x의 값이 커지면 y의 값은 1에 근사하게 되고 x의 값이 작아지면 y의 값은 0 에 근사하게 되어 S자형태의 그래프가 됨
    –두개의값을분류하는이진분류에많이사용

     

    3.오차 행렬

    -이진 분류의 예측 오류를 나타내는 지표

    -사이킷런에서는 오차 행렬을 구하기 위해 confusion_matrix함수 제공

     

    4.정확도

     

    5.정밀도

    -예측이 positive인 것중(FP+TP)중에서, 참인 것(TP)의 비율

    -positive예측 성능을 더 정밀하게 평가하기 위한 지표로 사용

    -precision_score

    6.재현율

    -실제값이 positive인 것(FN_TP)중에서 참인것 (TP)의 비율

    -실제positive인 데이터를 정확히 예측했는지 평가하는 지표

    -recall_score

    7.F1 스코어

    -정밀도와 재현율을 결합한 평가 지표

    -정밀도와 재현율이 서로 트레이드 오프 관계(상충 관계)인 문제점을 고려하여 정확한 평가를 위해 많이 사용

    -f1_score

    8. ROC 기반 AUC 스코어

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

    -FPR: 실제 negative인 데이터를 positive로 거짓fasle으로 예측한 비율

    -TPR: 실제 positive인 데이터를 참true로 예측한 비율(재현율)

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

    -roc_auc_score

     

     

    <프로젝트>

    -목표: 유방암 특징을 측정한 데이터에 로지스틱 회귀 분석을 수행하여 유방암 발생예측

    데이터 가져오기

    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_breast_cancer
    
    b_cancer= load_breast_cancer()
    b_cancer_df= pd.DataFrame(b_cancer.data, columns = b_cancer.feature_names)
    b_cancer_df['diagnosis']= b_cancer.target
    print('유방암진단데이터셋크기: ', b_cancer_df.shape)

     

    로지스틱 회귀 분석에 피처로 사용할 데이터를 평균이 0, 분산이 1이 되는 정규 분포 형태로 맞춘다.

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    b_cancer_scaled= scaler.fit_transform(b_cancer.data)
    print(b_cancer.data[0])
    #피처로사용할데이터b_cancer.data에대해정규분포스케일링을수행scaler.fit_ transform( )하여b_cancer_scaled에저장
    print(b_cancer_scaled[0])

     

     

    로지스틱회귀를 이용한 모델구축

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

     

    통계값구하기

    from sklearn.metrics import confusion_matrix, accuracy_score
    from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score
    
    #오차행렬
    print(confusion_matrix(Y_test, Y_predict))
    #정확도, 정밀도,재현율, f1스코어, roc-auc스코어 구함
    acccuracy= 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(acccuracy,precision,recall,f1))
    print('ROC_AUC: {0:.3f}'.format(roc_auc))

     

     

     

     

    출처: 데이터 과학 기반의 파이썬 빅데이터 분석(이지은 지음)책을 공부하며 작성한 내용입니다.

Designed by Tistory.