머신러닝 16일차

ParkJinYoung·2022년 11월 8일
0

딥러닝때 배울기술들

  • Perceptron (단일 선형 모델)
  • MLP(Multi Layer Perceptron = 다중 선형 모델)
  • 머신러닝과 비슷(table 데이터에 잘 작동)
    - CNN(Convolution Neural Network = 다중 선형 모델 + a) : 이미지 인식
    • YOLO(You Only Look Once) : 객체의 영역 추정
      - RNN(순환 신경망) : 데이터 순서를 인지하지 못함, 시계열, 텍스트 데이터

폐암데이터(colab이용)

# 폐암 환자 데이터셋
# 이진분류 (사망 / 생존)
import pandas as pd
data = pd.read_csv('/content/ThoraricSurgery.csv',header = None)
data
# 17번 특성 정답데이터
# 0 사망, 1 생존

# 결측치, 타입 확인
data.info()

# 문제 정답 분리
X = data.iloc[:,:-1]
y = data.iloc[:,-1]

# train , test로 분리(훈련 , 평가 데이터)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=3)

# 머신 러닝 : 모델 선택 및 하이퍼 파라미터 튜닝
# 딥 러닝 : 모델 설계(설계, 학습 방법 설정)
# 딥 러닝 모델 설계
from tensorflow.keras import Sequential # 딥 러닝 모델 생성 => 공간 설계
from tensorflow.keras.layers import Dense # 신경망 설계 (뉴런을 설계) => 층을 쌓는다

model=Sequential() # 모델을 설계할 공간 만들기
# 설계된 공간에 뉴런(Dense(),사용할 정보를 적어줘야함) 집어넣기
# units = 사용할 뉴런의 개수
# input_dim = 입력(문제) 데이터의 차원(특성수)
# activation = 활성화함수 , 다음 뉴런에게 값을 전달하기전에 내 판단 추가하기
# 입력층 : input)_dim이 있다. => 차원(특성)에 개수에 맞게 적는다
model.add(Dense(units=32, input_dim = 17, activation = 'relu' ))

# 은닉층(중간층) : 두번째 ~ 마지막층 전까지의 모든층을 뜻한다.
# 두번째 층 부터는 input_dim이 필요하지 않음
model.add(Dense(units=32, activation = 'relu' ))

# 출력층 : 이진분류시 units= 1, activation = 'sigmoid'
# 다중 분류시 units = 클래스의 수 (정답의 종류), activation = 'softmax'
# 회귀시 units = 1, activation = 'linear'
# 마지막 층 : 전 뉴런에게 값을 받아서 결과를 종합하고 판단
# 사용하는 units의 숫자와 activation이 어느정도 고정됨
model.add(Dense(units=1,activation='sigmoid'))

# 딥러닝 모델 확인, 모델 설계 끝
model.summary()

# 학습 방법 설정(compile)
model.compile(
    loss = 'binary_crossentropy', 
    # 분류(이진분류 : 'binary_crossentropy', 
    # 다중분류 : 'categorical_crossentropy'), 
    # 회귀 : 'mean_squared_error'
    optimizer = 'adam', # 최적화 함수 (경사하강법의 종류)
    metrics = ['accuracy'] # 평가 방법 (분류, 회귀)
    # 분류 : ['accuracy']
    # 회귀 : ['mean_squared_error'], 생략가능
)

# 학습
model.fit(X_train,y_train,epochs=100) #epochs : 쌓은 model을 몇번 돌릴것인가

# 평가 score와 같이 확인해보기
model.evaluate(X_train,y_train)
model.evaluate(X_test,y_test)

# 예측
model.predict(X_test[:1]) # 인덱싱 1차원, 슬라이싱 2차원
profile
꾸준히

0개의 댓글