Machine learning #1 - MLP
<생활코딩 머신러닝 with 파이썬 텐서플로(실습편)> 1독 후,
2독과 함께 내용을 정리해보고자 한다.
1. Big picture
인공지능 > 기계학습 > 딥러닝
이런 지도학습의 도구로는
여러 알고리즘들이 있는데 - Decision Tree, Random forest, KNN, SVM 그리고 Neural Network Deep learing
이런 알고리즘들을 제공하는 library로는 - Caffe2, theano, PyTorch, 그리고 Tensorflow
이 책에서 다루는 모든 Tensor flow를 이용한 학습은 다음의 네 단계로 이루어진다.
#1. 데이터 준비
#2. 모델 형성
#3. 모델 학습
#4. 모델 이용
2. 가장 기본, Multilayer Perceptron - 연속변수(회귀)
ex) 보스턴 집값 예측 모델
#1. 데이터 준비
기존 데이터의 경우 (506, 14)의 2차원 데이터이다. (Table이므로)
MLP의 경우 2차원 데이터를 그대로 사용할 수 있으므로, 독립변수와 종속변수의 분리만 해준다.
이때 습관적으로 꼭 data shape을 확인하자.
#2. 모델 형성
Hidden layer 없이 1개의 Input layer와 1개의 Dense layer로 이루어진 모델을 만든다.
이 때 독립변수는 13개이므로 Input layer의 shape=[13]
Dense layer의 종속변수는 1로 둔다.
compile 시 loss는 현재 연속변수를 다루므로 'mse' = Mean squared error를 사용한다.
#3. 모델 학습 - fit method를 이용한다.
#4. 모델 적용 및 수식 확인
3. Multilayer Perceptron - 이산변수(분류)
ex) 붓꽃의 분류 모델
#1. 데이터 준비
4개의 독립변수(column)와 1개의 종속변수(이산형)로 이뤄진 2차원 Table
이때 이산형 변수의 경우 One hot encoding이 필요하다. -> 분류가 n개일 경우 n개의 column을 추가하여 1 or 0으로 표기, 즉 종속변수가 n개로 늘어난다.
이 때 One hot encoding은 pd.get_dummies(data) 한 줄로 끝낼 수 있다.
data shape을 확인해보면
raw data는 (150, 5)의 2차원 table이었는데, one hot encoding 후 (150, 7)로 늘어났고 변수 분리 이후에는
독립변수는 (150, 4), 종속변수는 (150,3)의 shape을 갖는다.
마찬가지로 MLN이므로 변수의 shape에는 이상이 없다. 바로 사용 가능하다.
#2. 모델 형성
Input layer shape은 독립변수가 4개이므로 [4]
Dense layer는 종속변수가 3개이므로 3
이때 회귀 모델과의 차이점 3가지!!!
1) 활성화 함수
위의 경우와 같은 단순 연속변수 -> 연속변수에서는 mse를 통해 loss를 계산할 수 있었으나, 즉 실제값과 얼마나 차이 나는지를 계산하여 loss를 표시했으나
분류의 문제와 같은 경우에는 이런 것이 불가능하다.
즉 모델이 분류를 예측할 때 확률값으로 예측해야 한다. (이 데이터를 바탕으로 생각했을 때 얘는 A일 확률이 90%, B일 확률이 10%입니다.)
이렇게 결과를 확률값으로 만들어주는 도구를 활성화 함수라고 한다.
즉 기존 y = w1x1 + w2x2 + b라는 weight과 bias로 이뤄진 모델에서의 종속변수 y는 -무한대~무한대 값을 가지는데
이를 softmax와 같은 함수로 감싸주면 0~1 사이의 값을 갖도록 보정해준다고 이해하자.
활성화 함수에는 다음과 같은 종류가 있다.
정확한 것은 추후에 공부해보자
2) loss = 'crossentropy'
마찬가지로 mse로 loss의 측정이 불가능하다. 이를 이산변수에서 대체해주는 기능이라고 생각하자.
3) metrics = 'accuracy'
compile 부분에 이러한 값을 넣으면 예측의 정확도를 결과에서 함께 보여준다.
#3. 모델 학습
#4. 모델 이용
다른 것 없음
4. Hidden layer
정확히 왜 Hidden layer가 학습의 효율을 향상하는지 이 책에서 알기는 어려웠다.
단, Hidden Dense layer의 사용 시에는 활성화 함수로 'swish'를 사용하는 것이 성능이 좋고, 이 외에 'relu'라는 유명한 함수도 있다는 것을 기억하고 넘어가자.
5. 데이터 세팅 팁
1) 분류 문제에서 범주형 데이터가 숫자인 경우 (0, 1, 2로 분류되어 있는 경우)
data.dtypes 메서드를 이용하여 데이터형을 확인한다.
-> pd.get_dummies는 object나 category 타입만 범주형으로 인식하여 one hot encoding을 시행하기 때문에
int 등인 경우 type을 바꿔줘야 한다. astype method를 이용하여
data['품종'] = data['품종'].astype('category') 이후에 get_dummies를 이용
2) NA값 체크
값이 비어있는 경우를 확인한다.
data.isna().sum() -> 비어있는 데이터가 있는 column을 확인하여 fillna() method를 이용해 채워주는데 보통 평균값을 이용한다.
mean = data['NA가 있는 column'].mean()
data['NA가 있는 column'].fillna(mean)
6. 모델 형성 시의 팁
BatchNormalization의 이용
Hidden layer을 사용할 때 BatchNormalization을 추가해주면 학습 속도 및 결과가 향상된다.
H = tf.keras.layers.Dense(8, activation='swish')(H)를
다음과 같이 변형한다.
H = tf.keras.layers.Dense(8)(X)
H = tf.keras.layers.BatchNormalization()(H)
tf.keras.layers.Activation('swish')(H)
7. 추후 추가로 공부할 것
1) 학습이 실제로 어떻게 이루어지는가? => Gradient checking
2) activation function의 기능은 어떠한가?
3) BatchNormalization의 의미는 무엇인가?
'코딩 > Machine learning' 카테고리의 다른 글
Machine learning #4 Random forest (0) | 2022.03.08 |
---|---|
Machine learning #3-1 Decision Tree practice (0) | 2022.03.08 |
Machine learning #3 Decision tree (0) | 2022.03.08 |
Machine learning #2 - Image classification, CNN (0) | 2022.03.03 |