-
[로지스틱 회귀 분석] 특징데이터로 유방암 진단하기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))
출처: 데이터 과학 기반의 파이썬 빅데이터 분석(이지은 지음)책을 공부하며 작성한 내용입니다.
'DataAnalysis > 모델 분석' 카테고리의 다른 글
[k-means]타깃마케팅을 위한 소비자군집 분석하기 (0) 2022.06.02 [결정 트리 분석] 센서 데이터로 움직임 분류하기 (0) 2022.06.02 [선형 회귀] 자동차 예상 연비 예측하기 (0) 2022.06.01 [선형회귀분석+ 산점도/선형회귀그래프] 환경에따른주택가격예측하기 (0) 2022.06.01 [상관분석+히트맵] 타이타닉호 생존율 분석하기 (0) 2022.06.01