[6week] 딥러닝

atdawn·2024년 10월 10일
0

AIVLE

목록 보기
16/25

Chapter 1. 딥러닝 코드 무작정 따라하기

딥러닝 모델 표현 방법

  • 선형 회귀 모델

코드 순서

실습 (Carseat)

  1. 데이터 불러오기
path = 'https://raw.githubusercontent.com/DA4BAM/dataset/master/Carseats.csv'
carseat = pd.read_csv(path)
carseat.head()
  1. 타겟 선정
target = 'Sales'
x = carseat.drop(target, axis=1)
y = carseat.loc[:, target]
  1. NaN, 가변수화 (필요시)
  2. 데이터 분할
x_train, x_val, y_train, y_val = train_test_split(x, y, test_size=.2, random_state = 20)
  1. 스케일링 (필수)
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_val = scaler.transform(x_val)
  1. 모델링

1) 모델 선언

# feature 개수 저장
nfeatures = x_train.shape[1] #num of columns
nfeatures

# 메모리 정리(필수는 아님!)
clear_session()

# Sequential 타입 모델 선언
model = Sequential([Input(shape=(nfeatures,)),
                    Dense(1)])

# 모델요약
model.summary()

# 컴파일
model.compile(optimizer='adam',loss='mse')

2) 학습

model.fit(x_train,y_train)

3) 예측

pred = model.predict(x_val)

4) 검증

print(f'RMSE  : {root_mean_squared_error(y_val, pred)}')
print(f'MAE   : {mean_absolute_error(y_val, pred)}')

딥러닝 학습 절차

medv=w1lstat+w0medv = w_1 * lstat + w_0

model.fit(x_train,y_train) 했을때의 과정

딥러닝 학습 절차

▪ 가중치 초기값을 할당한다. (초기 모델을 만든다.)
▪ (초기)모델로 예측한다.
▪ 오차를 계산한다. (loss function)
▪ 가중치 조절 : 오차를 줄이는 방향으로 가중치를 적절히 조절한다.(optimizer)
• 적절히 조절 → 얼마 만큼 조절할 지 결정하는 하이퍼파라미터 : learning rate (lr)
▪ 다시 처음으로 가서 반복한다.
• 전체 데이터를 적절히 나눠서(mini batch) 반복 : batch_size
• 전체 데이터를 몇 번 반복 학습할 지 결정 : epoch


딥러닝 구조

  • Layer가 1개이거나 마지막이라면 Output

딥러닝 코드 - Dense

Input : Input(shape=( , ))

  • 분석 단위에 대한 shape
    • 1차원 : (feature수,)
    • 2차원 : (rows, columns)

Output : Dense()

  • 예측 결과가 1개 변수(y가 1개 변수)


Compile

선언된 모델에 대해 몇 가지 설정을 한 후 컴퓨터가 이해할 수 있는 형태로 변환하는 작업

loss function(오차 함수)

  • Cost Function, Objective Function 과 같은 의미
  • 오차 계산을 무엇으로 할지 결정
  • mse : mean squared error
    • 회귀 모델 : mse
    • 분류 모델 : cross entropy

optimizer

  • 오차를 최소화 하도록 가중치를 업데이트 하는 역할
  • Adam
    • 최근 딥러닝에서 가장 성능이 좋은 Optimizer로 평가
  • learning_rate
    • 업데이트 할 비율
    • 기울기(gradient)에 곱해지는 조정 비율 (걸음걸이의 '보폭'을 조정한다고 표현)

learning_rate

가중치 한개의 업데이트 과정을 예로 들면


학습 fit

Epoch : 반복횟수

  • 주어진 train set을 몇번 반복 학습할지 결정
  • 적정 Epoch 수 찾기
    • 최적의 값은 케이스 마다 다름
    • 하이퍼 파라미터

validation_split

  • train 데이터에서 검증셋으로 분리하는 비율

batch_size

  • 배치 단위로 학습(가중치 업데이트), 기본값 32
  • 전체 데이터를 적절히 나눠서(mini batch)
    • ex) train data가 12행, batch_size = 4

.history

  • 학습을 수행하는 과정 중에 가중치가 업데이트 되면서 학습시 계산된 오차 기록.
  • 이를 저정한 후 차트를 그리면 -> 학습 곡선

학습 곡선

  • 모델 학습이 잘 되었는지 파악하기 위한 그래프
    • 정답은 아니지만, 학습 경향을 파악하는데 유용
  • 각 Epoch 마다 train error와 val eroor가 어떻게 줄고 있는지 확인
  • 바람직한 학습 곡선
      1. 초기 epoch에서는 오차가 크게 줄고
      1. 오차 하락이 꺾이면서
      1. 점차 완만해짐

모델 평가


딥러닝 구조 - Hidden Layer

  • Layer 여러개 : 리스트 []로 입력
  • hidden layer
    • activation : 활성함수는 보통 'relu'를 사용
  • output layer
    • 예측 결과가 1개

활성화 함수 : Activation Function

  • 현재 레이어(각 노드)의 결과값을 다음 레이어 (연결된 각 노드)로 어떻게 전달할지 결정/변환해주는 함수
  • Hidden Layer : 선형함수를 비선형 함수로 변환
  • Output Layer : 결과값을 다른 값으로 변환해 주는 역할
    • 주로 분류 모델에서 필요

Chapter 4. Feature Representation

Hidden Layer에서 무슨일이 일어나는가?


▪ 예를 들어, 내부요인은 70%, 외부요인은 30% 가중치를 준다면,
▪ 집값 = 0.7 내부요인 + 0.3 외부요인

▪ 기존 데이터를 받아들여, (우리는 정확히 알기 어렵지만) 뭔가 새로운 특징(New Feature)을 만들어 냄.
▪ 그 특징은 분명히 예측된 값과 실제 값 사이의 오차를 최소화 해주는 유익한 특징
▪ Hidden Layer에서는 기존 데이터가 새롭게 표현(Representation) 됨.
=> Feature Engineering이 진행된 것

Deep Learning -> Representation Learning


Chapter 5. DL 모델링 - 이진분류

딥러닝 구조 - 이진분류

딥러닝 구조 - 활성화 함수

(,)>(0,1)(-\infty,\infty) -> (0,1) 로 변환 : sigmoid 함수


딥러닝 구조 – Loss Function : binary_crossentropy

  • 이진 분류 모델의 loss 함수 : binary_crossentropy

  • 함수를 그대로 사용하기 위해서 1-y를 해줌

binary_crossentropy 함수


분류 모델 평가 : 예측 값 후속 처리

  • 분류 모델 출력 층의 활성화 함수 : 시그모이드
    • 예측값 : 0 ~ 1 사이의 확률값
  • 회귀 모델 : relu
  • 예측값을 .5 기준으로 잘라서 1, 0으로 변환
    • np.where(조건문, 참일 때 값, 거짓일 때 값)


DL 이진분류 실습 : titanic

  • 데이터준비
  • 가변수화
  • 데이터 분할
  • 스케일링
    ...
  • 모델설계
nfeatures = x_train.shape[1]
nfeatures

model2 = Sequential([Input(shape=(nfeatures,)),
                     Dense(1,activation='sigmoid')])

model2.summary()
  • 컴파일 + 학습
model2.compile(optimizer=Adam(learning_rate=0.01), loss='binary_crossentropy')
result2 = model2.fit(x_train,y_train,
           epochs=50,
           validation_split=0.2).history
  • 학습결과 그래프

  • 예측 및 검증

pred2 = model2.predict(x_val)
pred2 = np.where(pred >= .5, 1, 0)

print(classification_report(y_val,pred2))


Chapter 6. DL 모델링- 다중분류

딥러닝 구조 - Output Layer

  • 다중분류 모델에서 Output Layer의 node 수는 y의 범주 수와 같음.

softmax

  • 각 Class별로 예측한 값을, 하나의 확률값으로 표현

다중 분류 오차 계산 : Cross Entropy

  • 실제 값 1인 Class와 예측 확률 비교

다중 분류 모델링을 위한 전처리

  • 다중분류 : Y가 범주이고, 범주가 3개 이상
  • 우리는 방법1 사용
  • 방법2는 쉽게말하면 가변수화

다중분류 실습 : iris

데이터 준비

  1. y값을 0,1,2 로 변환
    (sparse_categorical_crossentropy 사용을 위해)
data['Species'] = data['Species'].map({'setosa':0, 'versicolor':1, 'virginica':2})
data.head()
  1. 데이터준비
  2. 데이터 분할
  3. 스케일링

모델링1

  1. 모델설계
nfeatures = x_train.shape[1] #num of columns
nfeatures

# 메모리 정리
clear_session()

# Sequential
model = Sequential( [Input(shape = (nfeatures,)),
                     Dense( 3, activation = 'softmax')] )

# 모델요약
model.summary()
  1. 컴파일 + 학습
model.compile(optimizer=Adam(learning_rate=0.1), loss= 'sparse_categorical_crossentropy')

history = model.fit(x_train, y_train, epochs = 50, validation_split=0.2).history

  1. 예측 및 검증
  • 예측 결과는 softmax로 변환된 값
pred = model.predict(x_val)
pred[:5]

# 전체에 적용해서 변환합시다. ( 가장 큰 확률의 인덱스로 변환)
pred_1 = pred.argmax(axis=1)
pred_1

print(confusion_matrix(y_val, pred_1))
print(classification_report(y_val, pred_1))

profile
복습 복습 복습

0개의 댓글