✅시그모이드 함수
특정 임계값을 정해서 크고 작다를 통해 True, False값으로 판단합니다.
임계값은 보통 0.5 를 사용하지만 다른 값을 사용하기도 합니다
✅ Loss & Metric
Loss 와 Metric의 차이
loss는 훈련에 사용해서 가중치(weight)와 편향(bias)을 업데이트하고, metric은 검증에 사용한다
분류의 Loss
loss 값을 보고 label이 어떤 형태인지 알 수 있습니다. label 값이 바이너리, 원핫, 오디널 인코딩 되어 있는지 보고 loss 값을 지정해야 합니다
- 이진분류 : binarycrossentropy
- 다중분류(one-hot) : categorical_crossentropy
- 다중분류(ordinal) : sparse_categorical_crossentropy
=> 보통은 정형데이터는 딥러닝보다는 머신러닝이 대체적으로 좋은 성능을 내기도 합니다. 물론 딥러닝이 좋은 성능을 낼때도 있습니다. 무엇보다도 중요한 것은 데이터 전처리와 피처엔지니어링이 성능에 더 많은 영향을 줍니다.
garbage in garbage out => 좋은 데이터를 통해 모델을 만드는게 성능에 가장 중요한 역할을 합니다
분류와 회귀의 출력층 차이
=> 분류는(n, activation='softmax'), (1, activation='sigmoid') 이 있는데 회귀는 항등함수
loss와 val_loss
loss는 훈련 손실값, val_loss는 검증 손실값
validation_split 지정해야 val_loss가 나온다.model.fit(X_train, y_train, epochs, validation_split)
✅ 선형 회귀와 DNN 회귀
DNN이라도 입력값이 불충분하다면 제대로 학습하기 어렵다는 것을 볼 수 있습니다
1) 단일 입력 선형 회귀
2) 다중 입력 선형 회귀
3) DNN 단일 회귀
4) DNN 다중 회귀
Untitled
✅ 요약
regression 실습에서 보고자 하는 point
- 정형데이터 입력층 input_shape
- 정규화 레이어의 사용 => 직접 정규화해도 됩니다.
- 출력층이 분류와 다르게 구성이 된다는 점
- loss 설정이 분류, 회귀에 따라 다르다.
- 입력변수(피처)를 하나만 사용했을 때보다 여러 변수를 사용했을 때 성능이 더 좋아졌다. => 반드시 여러 변수를 사용한다라고 해서 성능이 좋아지지 않을 수도 있지만 너무 적은 변수로는 예측모델을 잘 만들기 어렵다는 점을 알수 있습니다
실습 단계 및 플로우
- 딥러닝 모델을 조정하여서 회귀 딥러닝 모델을 생성하였습니다!
(분류 모델과 다르게 Dense 출력 유닛 1로 설정, Compile에서 loss, metrics 변경) - 자원과 시간을 아끼기 위해서 학습 과정 중 성능이 비슷하면 멈출 수 있도록 EarlyStopping을 설정해줍니다!
(tf.keras.callbacks.EarlyStopping -> 성능이 비슷함에도 남은 epochs가 많이 남았다면 시간이 아까우니까요) - 학습 과정에서 validation_split을 설정하여 검증 데이터셋도 설정해줍니다!
(모델이 과적합인지 과소적합인지 제 성능을 하는지 확인하기 위해서 -> model.fit(validation_split=0.2)) - 딥러닝 모델을 학습시킵니다.
(model.fit) - 학습한 모델의 성능을 history 표를 보면서 측정합니다!
(여기서 우리 전에 배웠던 loss, mae, mse 지표를 보면서 모델이 잘 예측했는지 평가해봅니다.
-> 검증모델에서의 지표와 비교를 해보고(val_loss, val_mae, val_mse 등등) 과대적합이 됐는지, 과소적합이 됐는지도 볼 수 있습니다.)
✅numpy
Q. dnn_model.predict(test_features).flatten() 예측 결과 뒤에 flatten() 이 있는 이유는 무엇일까?
예측값이 기본적으로 2차원으로 나온다. 그래서 1차원으로 바꿔주어야 한다. API 에서 제공하는 기능이라 사이킷런과 차이가 있다. 알고리즘의 원리는 비슷하지만 기능 구현에 차이가 있다. 논문을 작성할 때는 c, c++로 머신러닝, 딥러닝 알고리즘을 작성하기도 한다. 텐서플로, 파이토치는 리서처도 사용하기는 하지만 프로덕트 개발 등을 위한 목적으로 만들어졌기 때문에 밑바닥부터 코드를 작성하는 것에 비해 간단한 API를 제공하며, API 마다 기능의 차이가 있다.
사이킷런에서 정형데이터를 전처리하는 기능을 포함하고 있는 것처럼 텐서플로에서도 정형데이터, 이미지, 텍스트 등을 전처리하는 기능들도 포함하고 있다
numpy
a = np.arange(8)
print(a, "ndim : ", a.ndim)
b = a.reshape(2, 2, 2)
print(b, "ndim : ", b.ndim)
b.reshape(-1)
b.flatten(), b.ravel()
'멋쟁이사자처럼 AIS7 > 오늘코드' 카테고리의 다른 글
[1206]합성곱 신경망 (Convolutional Neural Network, CNN) 실습 (1) | 2022.12.06 |
---|---|
[1205] 합성곱 신경망 (Convolutional Neural Network, CNN) (0) | 2022.12.05 |
[1129] 인공신경망과 텐서플로 (0) | 2022.11.29 |
[1128] Confusion Matrix, Resampling, Deep Learning (2) | 2022.11.28 |
[1123] 부스팅 3대장과 분류의 평가지표 (0) | 2022.11.23 |
댓글