13. 데이터 분석하기유방암 데이터 분석(22.07.21)
[선형 회귀 분석 + 산점도/선형 회귀 그래프]
목표: 로지스틱 회귀분석을 이용해 유방암에 영향을 미치는 특징 데이터 분석, 예측 모델 생성
분류란?: 데이터에 주어진 클래스 값을 학습하여 각 클래스를 구별할 수있는 패턴을 찾아 학습 모델을 생성하고, 새로운 데이터에 대한 클래스를 예측 및 분류하는 기법
로지스틱 회귀란?: 분류에 사용하는 기법으로 S자 함수를 사용하여 참,거짓을 분류
시그모이드함수란?: 로지스틱 회귀에서 사용하는 S자 함수
X의값이 커지면 Y의값은 1에 근사하게되고, X의 값이 작아지면 Y의 값은 0에 근사하게 되어 S자 형태의 그래프가 만들어진다. 이러한 특성을 이용해 이진 분류에 많이 사용된다.
로지스텍 회귀 모델의 성능 평가 지표란?: 로지스틱 모델의 성능평가지표는 선형 회귀모델의 성능 평가 지표와는 다르다. 선형 회귀 모델은 잔차에 기반한 지표들을 사용하지만, 회귀모델은 분류결과를 평가하기 위해 오차행렬에 기반한 성능지표와 ROC_AUC를 사용한다.
(자세한 설명은 모델 성능 평가글에 정리해두었다.)
1.데이터 수집
사이킷 런에서 사용되는 유방암 진단 데이터셋을 사용한다.
from sklearn.datasets import load_breast_cancer
b_cancer=load_breast_cancer()
2.데이터 준비 및 탐색
b_cancer.DESCR
b_cancer_df=pd.DataFrame(b_cancer.data,columns=b_cancer.feature_names)
b_cancer_df['diagnosis']=b_cancer.target
b_cancer_df.head()
b_cancer_df.shape
b_cancer_df.info()
다음으로 로지스틱 회귀에 피처로 사용할 데이터를 평균 0, 분산 1이 되는 정규분포 형태로 맞춘다.
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
b_cancer_scaled=scaler.fit_transform(b_cancer.data)
b_cancer.data[0]
b_cancer_scaled[0]
[01,02행]: sklearn 패키지에 있는 정규분포 스케일러 객체를 생성
[03행]: b_cancer의 데이터를 정규 분포 스케일링한다.
[04,05행]: 스켕일링된 데이터와 원본데이터를 비교한다.
2.분석 모델 구축
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
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()
lr_b_cancer.fit(x_train,y_train)
y_pred=lr_b_cancer.predict(x_test)
y_pred
[03~04행]: 독립변수와 종속변수를 정해준다. 이때 독립변수는 스케일링한 데이터를 이용.
[05행]: 전체 데이터 샘플을 학습:평가데이터 비율을 7:3으로 분할
[06~08행]: 로지스틱모델을 통해서 y_pred 산출
이제 생성한 모델의 성능을 확인해볼 것이다.
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_pred)
accuracy=accuracy_score(y_test,y_pred)
precision=precision_score(y_test,y_pred)
recall=recall_score(y_test,y_pred)
f1=f1_score(y_test,y_pred)
roc_auc=roc_auc_score(y_test,y_pred)
print("정확도:{0: .3f}, 정밀도:{1: .3f}, 재현율:{2: .3f}, F1:{3: .3f}".format(accuracy,precision,recall,f1))
print('ROC_AUC: {0: .3f}'.format(roc_auc))
결과를 출력해보면 아래와 같이 나온다. Confusion matrix의 결과를 보게되면, tn=60 / fp=3 / fn=1 / tp=107이 된다.
'데이터분석실습 > 데이터 과학 기반의 파이썬 빅데이터 분석' 카테고리의 다른 글
파이썬 빅데이터 분석 Day 15 (1) | 2023.10.26 |
---|---|
파이썬 빅데이터 분석 Day 14 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 12 (1) | 2023.10.26 |
파이썬 빅데이터 분석 Day 11 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 10 (1) | 2023.10.26 |