DeseoDeSeo
[Deep Learning] ex01_유방암데이터분류( 이진분류 ) 본문
목표
- 환자 데이터를 바탕으로 유방암인지 아닌지를 구분해보자
- 딥러닝으로 이진분류 실습을 진행하자.
라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer # 사이킷런 내장 유방암데이터
데이터 불러오기
breast_data =load_breast_cancer()
breast_data
○ 머신러닝 데이터 구조 : 번치객체( 딕셔너리 형태 )
breast_data.keys()
# data: 문제 데이터, 입력특성
# target: 정답데이터
# target_names: 정답데이터의 이름
breast_data.target_names
# 0 ➜ 'malignant(악성)'
# 1 ➜ 'benign'(양성)
#class의 개수는 2개 ➜ 이진 분류 !
문제, 정답 분리
# 문제 데이터는 x, 정답 데이터는 y
X = breast_data['data']
y = breast_data['target']
train, test로 분리
from sklearn.model_selection import train_test_split
X_train,X_test,y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=919)
< 모델링 과정 >
1. 신경망 구조 설계( 뼈대, 입력층, 중간층, 출력층 )
2. 신경망 모델 학습/평가 방법 설정 (회귀, 분류)
3. 모델 학습
4. 모델 예측 및 평가
from tensorflow.keras.models import Sequential # 뼈대
from tensorflow.keras.layers import InputLayer, Dense
# 1. 신경망 구조 설계( 뼈대, 입력층, 중간층, 출력층 )
# 뼈대
model = Sequential()
# 입력층
model.add(InputLayer(input_shape=(30,))) # 입력층( 입력 특성의 개수를 정확하게 작성해야함.)
# 중간층(은닉층)
model.add(Dense(units=16, activation='sigmoid'))
model.add(Dense(units=8, activation='sigmoid'))
# 출력층 (출력받고 싶은 데이터 형태를 지정하는 곳임.) , 이진분류 1개의 확률값으로 결과값으로 받고 싶음.
model.add(Dense(units=1,activation='sigmoid'))
# sigmoid의 역할은 중간층에서는 역치의 역할? 출력층에서는 이진분류 1개의 확률값으로 결과값으로 변환시켜줌.
# sigmoid함수는 0에서 1사이의 함수이며, 값이 들어오면 0~1사이의 값을 반환함..
# sigmoid : S자형 곡선을 가지는 함수로 0~1사이의 값을 반환 !
# 선형모델의 결과값: 연속형 값 !
활성화함수는 중간층, 출력층에서 사용됨,
중간층 : 역치 역활( 활성화, 비활성화할지?)
step function ➜ sigmoid사용.(왜? 최적화 알고리즘 경사하강법을 적용하기 위해서 기울기와 역치 개념을 가지는 sigmoid를 사용하기 위해서)
출력층 : 최종결과의 데이터 형태를 결정
(내가 출력하고자 하는 형태에 따라 다르게 작성, units/activation)
2.모델학습 및 평가방법 결정
model.compile(loss='binary_crossentropy', # 오차: 이진분류➜ binary_crossentropy
optimizer='SGD', # 최적화 알고리즘(확률적 경사하강법)
metrics=['accuracy']) # metrics : 평가방법( 분류: 정확도)
3.모델 학습 및 시각화
h1=model.fit(X_train, y_train,validation_split=0.2, epochs=100)
시각화
plt.figure(figsize=(15,5))
plt.plot(h1.history['loss'],label='train_loss')
plt.plot(h1.history['val_loss'], label='val_loss')
plt.legend()
plt.show()
모델에 대한 전체적인 내부 구조 확인
model.summary()
'Deep Learning' 카테고리의 다른 글
[Deep Learning] 그동안 학습 정리 및 CNN (0) | 2023.09.25 |
---|---|
[Deep Learning] ex02_손글씨 데이터 분류(다중 분류) (1) | 2023.09.21 |
[Deep Learning] 퍼셉트론 (0) | 2023.09.19 |
[Deep Learning] 딥 러닝 모델링( 모델 구조 설계 ) (0) | 2023.09.19 |
[ Deep Learning ] co lab에서 간단 머신러닝 (0) | 2023.09.15 |