[AI스쿨 7기, 11주차] loss, metric, 분류, crossentropy, normalization, pipeline, 회귀, 단일, 다중, val_loss, validation_split, Dense(1)

hyemin·2022년 11월 30일

멋쟁이사자처럼

목록 보기
41/51

221130 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

✅ 0901 pima 실습파일

학습

로그 출력을 하지 않기 위해서 verbose=0

history = model.fit(X_train, y_train, epochs=100, validation_split=0.2,
          callbacks=[early_stop, PrintDot()], verbose=0)

예측

  • 질문 : 바이너리이면 결과가 2개 나와야 하는거 아닌가? → 소프트맥스라면 2개가 나온다. → 바이너리로 했기 때문에 예측값이 각 row 당 예측값이 하나씩 나온다. → 여기에서 나오는 값은 확률값(sigmoid) 0~1 사이의 값을 가진다. → 특정 임계값을 정해서 크고 작다를 통해 True, False 값으로 판단한다. → 임계값은 보통 0.5를 사용하지만 다른 값을 사용하기도 한다.
  • flatten 은 어제 MNIST, FMNIST 에서 입력값을 만들 때 사용했던 Flatten Layer 를 떠올려보기

평가

  • softmax로 했다면, argmax로 y_predict 값을 구할 수 있다.
  • 레이어, epoch 수, validation 변경 등을 통해 성능을 개선해보기 → 네트워크를 다양하게 구성해볼 수 있고, fit을 할 때 epoch 수 조정 등으로 성능을 변경해 볼 수 있다! → 레이어 구성은 보통 2의 제곱으로 사용하는 편이지만 그렇지 않아도 상관 없다.

❓ loss와 metric의 차이는 무엇일까?

◾ loss는 훈련에 사용해서 가중치와 편향을 업데이트하고, metric은 검증에 사용한다.

◾ loss는 손실함수인데 회귀는 MSE, MAE, 분류는 바이너리와 멀티클래스에 따라 나누어진다. Metrics는 평가 지표로 회귀는 MSE, MAE, 분류는 accuracy가 있다.

◾ (loss => W, b 값을 업데이트 해주기 위해 사용하고, metric 모델의 성능을 평가)

❓ 분류일 때 사용하는 loss의 종류는?

◾ 이진분류 - binarycrossentropy
◾ 다중분류 : 원핫인코딩 - categorical_crossentropy
◾ 다중분류 : 오디널 - sparse_categorical_crossentropy

❓ 머신러닝을 썼을 때와 딥러닝을 사용했을 때 성능이 어떤가?

◾ 보통은 정형데이터는 딥러닝보다는 머신러닝이 대체적으로 좋은 성능을 내기도 한다. 무엇보다도 중요한 것은 데이터 전처리와 피처엔지니어링이 성능에 더 많은 영향을 준다.

◾ garbage in garbage out : 좋은 데이터를 통해 모델을 만드는 것이 성능에 가장 중요한 역할을 한다.

✅ 텐서플로우 regression 예제

❓ MPG 데이터셋은 무엇일까?

◾ mile per gallon, 자동차 연비 예측 데이터셋

◾ 앤스콤 → MPG 수치, 범주 데이터 기술통계 실습과 스트림릿 실습 때 사용

훈련, 테스트 세트

  • train_dataset = dataset.sample(frac=0.8, random_state=0)
  • 8 : 2 로 train, test 나눠줌

❓ 샘플로 데이터서브셋을 만들었던 실습을 어디에서 했을까?

◾ 언더샘플링

◾ 다운캐스트 할 때 : 처방내역 데이터

❓ 스케일 값의 차이가 클 때 할 수 있는 것?

◾ 정규화 (min-max, robust, standard)

  • 스케일링 각각의 특징을 정리하기 Z-score (Standard) scaling은 평균을 0으로, 표준편차를 1로 만들고 평균을 이용하여 계산하기 때문에 이상치에 민감하지 않습니다. Min-Max scaler는 이름 그대로 최솟값과 최댓값을 0과 1로 지정합니다. 이는 정규분포가 아니거나 표준편차가 작을 때 효과적입니다. 하지만 이상치를 포함하고 있다면 범위 설정에 영향이 가기 때문에 이상치에 민감합니다. Robust scaler는 중앙값을 0으로, 사분위 수를 1로 만들고 중앙값을 이용하기 때문에 앞의 두 정규화 방법들에 비해 이상치에 강합니다.

◾ 스케일만 바꿀 뿐이지 분포는 변하지 않는다.

정규화

  • Normalization : 사이킷런에 있는 전처리 기능처럼 텐서플로도 전처리 기능을 제공한다.
  • 전처리 레이어를 추가해서 모델을 만들 때 전처리 기능을 같이 넣어줄 수 있다.
  • 장점은 정규화 방법을 모르더라도 추상화된 기능을 사용해서 쉽게 정규화 할 수 있다.
  • 추상화 기능의 단점은 소스코드, 문서를 열어보기 전에는 어떤 기능인지 알기 어렵다는 것이다.
  • 사이킷런의 pipeline 기능과 유사하다.
    • from sklearn.pipeline import make_pipeline : 인코딩, 표준화, 결측치 대체 등을 훨씬 짧은 코드로 가능하게 해준다.
  • horsepower_normalizer : horsepower 변수를 가져와서 해당 변수만 정규화 해주는 코드
  • 사이킷런의 전처리 기능이나 직접 계산을 통해 정규화 해주는 방법도 있다.
  • tf 에서도 정규화 하는 기능을 제공한다.

모델

  • optimizer=tf.keras.optimizers.Adam(learning_rate=0.1)
    • Adam을 하면 learning_rate 를 기본값으로 사용하게 되는데, 특정 learning_rate를 지정할 수 있다.
    • 보통 옵티마이저는 learning rate 를 기본값으로 가지고 있다.
  • 컴파일 시, 분류와 회귀 모델의 가장 큰 차이는 loss 값 지정이다.

❓ 레이어 구성에서 출력층의 분류와 회귀의 차이?

◾ 분류는(n, activation='softmax'), (1, activation='sigmoid') 이 있는데 회귀는 항등함수

◾ 항등함수 : 입력 받은 값을 그대로 출력하는 함수

◾ 회귀의 출력층은 항상 layers.Dense(units=1) 형태

❓ 이전 분류 실습과 회귀 loss 의 차이?

◾ 분류: crossentropy 회귀: mae, mse 등

  • 딥러닝에서는 모델에 fit 해준 걸 왜 history라고 할까 : epoch 를 통해 학습을 하면 그 학습결과를 로그로 저장을 해서 history라는 API 명을 사용한다. 반복학습된 걸 기록. 과거를 기록하니 역사…

단일, 다중입력

  • 선형회귀(다중입력), DNN(다중입력) 시 plot_loss(history) 의 오차가 작게 나와야 잘 예측한 모델인데, DNN이 선형회귀에 비해 성능이 조금 더 낮은 값을 낸다.
  • 과소적합 : 다중입력 선형회귀 사용했을 때 에러가 단일입력 DNN 사용했을 때 에러보다 낮을 때. DNN 이라도 입력값이 불충분하다면 제대로 학습하기 어렵다는 것을 알 수 있다.
  • loss 와 val_loss 의 차이 : loss 는 훈련 손실값, val_loss 는 검증 손실값

❓ 어떻게 해야 val 결과가 나올까?

◾ validation_split 지정

→ ❓ 어디에서 지정할까? model.fit(X_train, y_train, epochs, validation_split)

❓ dnn_model.predict(test_features).flatten() 예측 결과 뒤에 flatten() 이 있는 이유는 무엇일까?

◾ 2차원을 1차원으로 만들어주려고

regression 실습에서 보고자 하는 point

  • 정형데이터 입력층 input_shape
  • 정규화 레이어의 사용 : 직접 정규화해도 된다.
  • 출력층이 분류와 다르게 구성이 된다.
  • loss 설정이 분류, 회귀에 따라 다르다.
  • 입력변수(피처)를 하나만 사용했을 때보다 여러 변수를 사용했을 때 성능이 더 좋아졌다.

✅ 0902 실습파일

  • Insulin 값이 0보다 큰 값. 깊은 복사
  • frac을 사용해서 train, test를 8:2로 나눔
  • 딥러닝 레이어 만들기
    • 회귀라서 출력을 하나로 하는 것에 주의 tf.keras.layers.Dense(1)
    • optimizer는 adam으로 해도 되고, 미리 설정해둔 optimizer로 해도 된다.
  • 학습
    • early_stop 설정 할 때 monitor=’val_mae’
    • 학습을 많이 시키고 싶다면 patience 값을 올리기
    • epochs=1로 설정해서 model.fit이 잘 동작하는지 확인하고 epochs 수를 늘려보기
    • 비정형으로 가게 되면 learning_rate, optimizer에 따라 속도 차이가 현저하게 달라진다.
  • 예측
    • y_pred.shape 하면 2차원으로 출력되는 것을 볼 수 있기 때문에 flatten() 으로 1차원으로 변환한다.

조은님과의 대화

  • 채용 과제가 있는 회사와 아닌 회사(코딩테스트를 보는 회사와 보지 않는 회사) == 지원자가 많다.
  • Q. 선형이랑 DNN 이랑 차이를 히든레이어가 있냐, 없냐 / activation을 설정하냐 안하냐
  • → 히든레이어가 있는가 없는가가 조금 더 맞을 것 같다.
  • 네이버 커넥트 재단 - 부스트코스(네이버 조직)
  • 클로바, 버즈빌
profile
아직 고쳐나가는 중.

0개의 댓글