<특징 데이터로 유방암 진단하기 목표 설정>
목표 | 로지스틱 회귀 분석을 이용해 유방암에 영향을 미치는 특징 데이터를 분석하고 유방암 여부를 진단하는 예측 모델을 생성한다. |
핵심 개념 | 로지스틱 회귀, 시그모이드 함수, 성능 평가 지표, 오차 행렬, 정밀도, 재현율, F1 스코어, ROC 기반 AUC 스코어 |
데이터 준비 | 유방암 진단 데이터 : 사이킷런 내장 데이터셋 https://archive.ics.uci.edu/dataset/17/breast+cancer+wisconsin+diagnostic |
데이터 탐색 | 1. 사이킷런 데이터에서 제공되는 설명 확인:b_cancer.DESCR 2. 사이킷런 데이터셋에 지정된 X 피쳐와 타깃 피쳐 결합 3. 로지스틱 회귀 분석을 위해 X 피쳐 값을 정규 분포 형태로 스케일링 : b_cancer_scaled = scaler.fit_transform(b_cancer.data) |
분석 모델 구축 | 사이킷런의 로지스틱 회귀 모델 구축 |
결과 분석 | 성능 평가 지표 계산: confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, roc_auc_score |
* 들어가기에 앞서 개념 잡고 가기
<로지스틱 회귀>
- 선형 : 대표직선을 그린거. 대표성을 그리기 때문에 (정확하지 않지만)
> 실제값과 예측값의 오차에 기반한 지표를 사용
- 로지스틱 : 직선형태로 대표선을 그을수가 없는 경우 시그모이드를 이용해서 로지스틱 회귀선을 만들 수 있음.
S자 함수를 사용하여 참(True, 1)과 거짓(False, 0)을 분류 할 수 있음.
> 이진 분류 결과를 평가하기 위해 오차 행렬에 기반한 정밀도, 재현율, F1, ROc_AUC 많이 사용.
- 시그모이드 함수 : 로지스틱 회귀에서 사용하는 S자 함수
> x의 값이 커지면 y의 값은 1에 근사하게 되고 x의 값이 작아지면 y의 값은 0에 근사하게 되어 s자가 됨.
> 두개의 값을 분류하는 이진 분류에 많이 사용함.
<오차행렬> - 이진 분류의 예측 오류를 나타내는 지표
> 전에 했었음 관련 포스팅 https://dev-adela.tistory.com/162
- 정밀도 (precision) : (사이킷런) precision_score 함수 사용가능
> Positive 예측 성능을 더 정밀하게 평가하기 위한 지표로 사용
- 재현율 (recall, sensitivity) : (사이킷런) recall_score함수
> 데이터를 정확히 예측했는지 평가하는 지
- F1 스코어 : (사이킷런) f1_score 함수를 제공
> 정밀도와 재현율이 서로 트레이드 오프관계인 문제점을 고려하여 정확한 평가를 위해 많이 사용
- ROC 기반 AUC 스코어 : (사이런) roc_auc_score 함수
> 오차 행렬의 FPR이 변할 때 TPR이 어떻게 변하는지 나타내는 곡선
> FPR = 실제 N인 데이터를 P로 거짓 False으로 예측한 비율
> TPR = 실제 P인 데이터를 T로 예측한 비율(재현율)
> ROC기반의 AUC 값은 ROC 곡선 밑의 면적을 구하는 것으로 1에 가까울수록 성능이 좋음.
보스턴 - 선형
붓꽃데이터 - 선형 or 분류
<유방암 진단하기>
<데이터 준비>
<EDA>
7행 DESCR를 작성해서 데이터 셋에 대한 설명을 확인하고
10행을 통해서 데이터셋 객체를 DataFrame 자료형으로 변환해서 생성
12행 유방암 유무를 class로 사용할 diagnosis 컬럼을 추가
15행. 데이터 셋 크기도 알아보고 (diagnosis 컬럼 추가해서 31열)
info() 사용해서 데이터 프레임의 정보(Null이 있는지 없는지 데이터 타입은 뭔지) 알아보고
▷ info는 print를 이미 리턴해주고 있어서 print( info() )라고 안적어줘도 출력 됨
<모델링>
정규 분포 스케일러를 임포트 하고 사용할 객체 scaler를 생성
21행. 피처로 사용할 데이터 b_cancer.data에 대해 정규 분포 스케일링을 수행 scaler.fit_transform()
원데이터는 평균이 0으로 안나오기 때문에 정규분포 형태로 만들어준다 > 평균을 0, 분산이 1이 되게 만들어줌
훈련/테스트 데이터 분할하고 로지스틱회귀로 모델링 해주고 fit으로 학습하고 predict으로 예측해봤음
<성능 및 결과 분석>
오차행렬을 만들어주고 출력해보니 저렇게 만들어져 있다. 맞춘게 60, 107개...!
이를 토대로 위에서 배운 내용을 사이킷런 함수를 사용하여
정확도와 정밀도, 재현율, F1 값을 출력해서 성능을 알아봄
'머신러닝 > 프로젝트' 카테고리의 다른 글
Proj 피마 인디언 당뇨병 예측 (0) | 2023.10.24 |
---|---|
Proj 콤프레샤 모터의 이상감지 (2) | 2023.08.21 |
Proj 자동차 연비 예측하기 (0) | 2023.08.09 |
Proj 보스턴 주택 가격 회귀분석 (0) | 2023.08.09 |
Proj 타이타닉호 생존율 분석, 상관관계 찾기 (0) | 2023.08.08 |