양적(숫자형) -> 숫자형
범주형 -> 분류형
기계적으로 외워져버린 판별법이다.
대신 변수가 숫자형인지 범주형인지는 잘 파악할 것.
종속변수의 값이 범주형일 때는 어떻게 할까?
숫자가 아닌 것이 수식의 결과로 나올 수는 없을 것이다.
수식에서는 입력이든 출력이든 숫자만 들어갈 수 있다.
범주형 데이터를 수식에 사용할 수 있도록 바꾸어 주어야한다.
범주형 데이터를 0과 1로 바꾸어주는 과정을 '원핫인코딩(onehot-encoding)' 이라고 한다.
import pandas as pd
import tensorflow as tf
# 데이터 준비
아이리스 = pd.read_csv('iris.csv')
print(아이리스.shape)
# 원핫인코딩
아이리스 = pd.get_dummies(아이리스)
아이리스.columns
독립 = 아이리스[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 아이리스[['품종_setosa', '품종_versicolor','품종_virginica']]
print(독립.shape, 종속.shape)
아이리스.head()
# 모델 준비
X = tf.keras.Input(shape=[4])
Y = tf.keras.layers.Dense(3, activation = 'softmax')(X)
model = tf.keras.Model(X,Y)
model.compile(loss = 'categorical_crossentropy', metrics = 'accuracy')
model.summary()
+ layer에 이름을 붙일 수도 있다.
# 모델 준비
X = tf.keras.Input(shape=[4], name = 'iris')
Y = tf.keras.layers.Dense(3, activation = 'softmax', name = 'category')(X)
model = tf.keras.Model(X,Y)
model.compile(loss = 'categorical_crossentropy', metrics = 'accuracy')
model.summary()
Layer의 이름이 바뀌었다. name 지정 안하면 자동으로 넘버링 지정해서 보여줌.
독립변수 4개, 종속변수 3개 이므로 3개의 수식을 찾아내야 할 것 같다.
위의 코드에서 처음보는 낯선 것들이 보인다. activation, categorical_crossentropy, accuracy ...
나중에 제대로 이해하면서 해결하자. 우선 범주형에는 이렇게 쓰이는 것이다. 숫자형이면 loss가 'mse' 이고.
지금까지 해왔던 수식은 y = w1x1 + w2x2 ... 였지만 이번 수식은 softmax가 감싸준다.
사실 퍼셉트론에는 최종결과가 나오기전에 함수 하나가 추가되어 있는데, 숫자를 예측했던 회귀 모델에서도 감싸고 있는 녀석이 있었다.
입력을 그대로 출력으로 내보내는 Identity 함수가 있었다 !
이번 범주형 수식에는 activation(활성화함수)에 softmax를 지정해주는 것이다.
accuracy를 지정해주면 결과에서 정확도를 보여준다. 1이면 100% 맞춘 것이고, 0이면 틀린 것이다.
# 데이터로 모델 학습
model.fit(독립, 종속, epochs=500, verbose = 0)
model.fit(독립, 종속, epochs=10)
accuracy 확인 가능.
loss가 떨어지면 accuracy가 올라가는 것도 볼 수 있음.
# 모델을 이용
model.predict(독립[:5])
각 칼럼의 값이 1에 가까울수록 그 품종인 것을 알 수 있다.
model.get_weights()
y1 = w1x1 + w2x2 + w3x3 + w4x4 + b 가 독립변수 4개, 종속변수 1개 ( 품종 1가지 )를 나타내는 수식이었으면,
품종에서 첫 번째 column 이었던 setosa의 수식은 0.4763671x1+ 0.93662786x2 -2.4667342x3 -2.1798112x4 + 1.3018354 가 된다.(x1, x2, x3, x4는 데이터 값)
#품종이 2 class 일 때
1. 품종을 0, 1의 값으로 치환.
- 종속변수가 1개
- sigmoid, binary_crossentropy 사용
2. 품종을 onehot encoding => 0칼럼, 1칼럼
- 종속변수 2개
- softmax, categorical_crossentropy 사용.
'AI' 카테고리의 다른 글
[Machine Learning] 기본 정리 (0) | 2023.10.12 |
---|---|
[Machine Learning] Machine Learning (0) | 2023.10.11 |
[Deep Learning] 딥러닝 히든레이어 (0) | 2023.09.05 |
[Deep Learning] 딥러닝 보스턴 집값 예측, 퍼셉트론 (0) | 2023.09.04 |
[Deep Learning] 딥러닝 Tensorflow 기본, loss (0) | 2023.09.04 |
댓글