AI 이론/딥러닝 이론
[분류 딥러닝 모델링] tensorflow코딩 (sigmoid함수, confusion metrics 평가)
jasonshin
2021. 11. 30. 12:54
1. 비어있는 데이터 확인
2. X 와 y 설정
3. 문자열 데이터를 숫자로 변경한다. (인코딩 2가지 중 택1)
X의 Geography는 3개로 되어있으므로 원핫인코딩 / X의 gender는 2개로 되어있으르모 레이블 인코딩
Female, Male 정렬하면 Female이 0, Male이 1이 된다.
# 원핫 인코딩한 결과의 맨 왼쪽 컬럼은 삭제를 해도 0과 1로 모두 3개 데이터표현가능.
Dummy variable trap : 즉 맨 앞쪽 하나의 컬럼은 지워도 된다.
0 0 1 => 0 1
0 1 0 => 1 0
1 0 0 => 0 0
X.drop('Geography_France', axis=1, inplace=True) <= 컬럼하나 삭제해도 무방
4. 각 데이터의 범위를 일정하게 맞춰주는 피쳐 스케일링 한다. (classicfication 2가지 중 택1)
# 딥러닝은 무조건 피쳐스케일링 한다.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
5. 학습용과 테스트용으로 나눈다.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=50)
6. 딥러닝으로 모델링
# Sequential: 딥러닝 그물망 구조
# Dense: 레이어 한 열을 말한다.
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
X.shape
(110, 11)
# 첫번째 히든레이어 생성 : 이때는 인풋 레이어의 숫자도 세팅해준다. (컬럼수)
model.add(Dense(units=6, activation='relu',input_dim= 11 ))
# 두번째 히든레이어 생성
model.add(Dense(units=8, activation='relu'))
# 아웃풋 레이어 생성
model.add(Dense(units=1, activation='sigmoid'))

model.summary()
# 컴파일 한다! Compile한다. 오차함수를 설정하고, 옵티마이저(그레이언트 디센트 알고리즘)를 설정한다.
# 옵티마이저는 그데리언트 디센트 알고리즘을 개선한 것들 중에서 선택하면 된다.
# 그레디언트 디센트는 오차가 최소가 될 때의 W값을 찾는 알고리즘이다.
# loss는 오차함수를 말한다.
# 분류의 문제는 2가지로 나뉜다.
# 1. 2개로 분류하는 문제 : binary_crossentropy
# 2. 3개 이상으로 분류하는 문제 : categorical_crossentropy
# 위의 2개 중에 하나를 설정해 준다.
# 딥러닝은 분류, 예측(regression) 둘다 해결 가능
# metrics 분류의 문제는 보통 정확도를 측정한다. 따라서 accuracy를 설정해준다.
model.compile(optimizer= 'adam', loss='binary_crossentropy', metrics=['accuracy'])
# 만든 모델을 요약
model.summary()
# 학습할때, 파라미터를 2개만 세팅했을때의 결과
# model.fit(X_train, y_train)
# 250/250 [==============================] - 0s 2ms/step - loss: 0.4826 - accuracy: 0.7960
# <keras.callbacks.History at 0x7fcdee571910>
# 컴파일이 끝나면 학습 # loss = 오차, accuracy = 정확도
model.fit(X_train, y_train, epochs=20, batch_size=10)
7. 평가
# 학습이 끝나면, 평가해야 한다.
y_pred = model.predict(X_test)
# 0 ~ 1 사이의 실수로 나온다.
# 이유는? 아웃풋 레이어의 액티베이션 함수로 시그모이드를 사용했기 때문에!
# y_pred 값이 실수로 나왔기 때문에 컨퓨젼 매트릭스에 넣을 수가 없다.
# 따라서 0.5를 기준으로 크면 1로, 작으면 0으로 맞춰줘야 한다.
y_pred = (y_pred > 0.5).astype(int)
# y_pred는 2차원 이므로, 컨퓨젼 매트릭스에 넣을 수 없기 때문에
# 1차원으로 만들어준다.
y_pred.shape
(2000, 1)
from sklearn.metrics import confusion_matrix, accuracy_score
confusion_matrix(y_test, y_pred)
accuracy_score(y_test, y_pred)
# 텐서플로우의 평가 함수 제공
model.evaluate(X_test, y_test)
# 적용
new_data = np.array([0, 38, 90000, 2000, 500000])
new_data = new_data.reshape(1,5)
new_data= scaler.transform(new_data)
model.predict(new_data)
반응형