본문 바로가기
딥러닝/분류

[파이썬 사이킷런 딥러닝] 분류 예제 (breast cancer)

by 만다린망고 2022. 11. 3.
반응형

유방암 진단 예제입니다. 입력 변수의 종류는 30가지입니다. 환자의 30가지 정보를 입력하고, 유방암 여부를 판별해주는 신경망을 만드는 것이 목적입니다. 

 

1. 필요한 패키지 설치하기

pip install sklearn
pip install scikit-neuralnetwork
pip install matplotlib
pip install pandas
pip install numpy

 

2. 패키지 불러오기

사용할 패키지들을 불러옵니다. 코드는 아래와 같습니다. 

 

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
import pandas as pd
import matplotlib.pyplot as plt

 

3. 데이터 불러오기

cancer= load_breast_cancer()

 

불러온 데이터는 bunch 라는 클래스로 만들어져 있습니다. 딕셔너리와 비슷하게 key:value 쌍을 가집니다. 먼저 key를 불러오면 아래와 같습니다. 

cancer.keys()
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module’])

 

cancer.data 로 입력변수에 접근할 수 있습니다. cancer.feature_names 로 입력 이름에 접근할수 있습니다. 데이터의 차원을 확인해봅시다. 

 

cancer.data.shape
(569, 30)

 

4. 데이터를 그래프로 그려보기

데이터를 그래프로 그려봅시다. 판다스 데이터프레임 형태로 입력하고, 상자수염그림을 그렸습니다. tight_layout( ) 은 padding 자동조절 옵션입니다. 코드와 그래프는 아래와 같습니다. 

#데이터를 그래프로 그려보기
df=pd.DataFrame(cancer.data)
df.columns=cancer.feature_names

df.boxplot().plot()
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()

 

 

5. 트레이닝셋, 테스트셋 나누기

트레이닝에 사용할 데이터와 테스트에 사용할 데이터를 나눠줍니다. train_test_split 함수를 사용합니다. stratify=y 로 설정 시, target 의 비율을 유지해줍니다. random_state 값을 지정하면 수행시 마다 동일한 값이 추출됩니다. seed 를 고정하는 것입니다. test_size 는 테스트셋의 비율을 결정합니다. 

코드는 아래와 같습니다. 

#트레인셋 테스트셋 분리
x_train, x_test, y_train, y_test =train_test_split(cancer.data,cancer.target, stratify=cancer.target, random_state=42, test_size=0.25)

 

6. 모델 훈련

MLPClassifier 함수로 객체를 생성하고, fit 메소드로 모델을 훈련합니다. score 메소드로 트레인셋의 정확도를 계산합니다. 

코드는 아래와 같습니다. 

#객체 생성
mlp = MLPClassifier(hidden_layer_sizes=(100,),solver='adam')   #options : 'lbfgs','sgd','adam'
#모델 훈련
mlp.fit(x_train,y_train)
#트레인셋 정확도
score=mlp.score(x_train,y_train)
print(score)

 

7. 평가

테스트셋을 이용하여 모델을 평가합니다. 코드는 아래와 같습니다. 

#테스트셋 정확도
score=mlp.score(x_test,y_test)
print(score)

# 모든코드 모아보기

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
import pandas as pd
import matplotlib.pyplot as plt

cancer= load_breast_cancer()

#cancer.keys()
#dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])

#cancer.data.shape
#(569, 30)


#데이터를 그래프로 그려보기
df=pd.DataFrame(cancer.data)
df.columns=cancer.feature_names

df.boxplot().plot()
plt.xticks(rotation=90)
plt.tight_layout()
plt.show()


#트레인셋 테스트셋 분리
x_train, x_test, y_train, y_test =train_test_split(cancer.data,cancer.target, stratify=cancer.target, random_state=42, test_size=0.25)

#객체 생성
mlp = MLPClassifier(hidden_layer_sizes=(100,),solver='adam')   #options : 'lbfgs','sgd','adam'
#모델 훈련
mlp.fit(x_train,y_train)
#트레인셋 정확도
score=mlp.score(x_train,y_train)
print(score)

#테스트셋 정확도
score=mlp.score(x_test,y_test)
print(score)
반응형

'딥러닝 > 분류' 카테고리의 다른 글

[파이썬 사이킷런 딥러닝] 분류 예제 (make_moons)  (0) 2022.11.02

댓글