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을 설정하냐 안하냐
- → 히든레이어가 있는가 없는가가 조금 더 맞을 것 같다.
- 네이버 커넥트 재단 - 부스트코스(네이버 조직)
- 클로바, 버즈빌