출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] KT Aivle School 에이블스쿨 중간점검] 딥러닝_DNN :: 하나둘셋넷
728x90

 

(1) y 값을 0,1,2로 변환하기

data['Species'] = data['Species'].map({'setosa':0, 'versicolor':1, 'virginica':2})
data.head()

 

(1) 모델 설계

data['Species'] = data['Species'].map({'setosa':0, 'versicolor':1, 'virginica':2})
data.head()target = 'Species'
x = data.drop(target, axis = 1)
y = data.loc[:, target]

x_train, x_val, y_train, y_val = train_test_split(x, y, test_size = .3, random_state = 20)

nfeatures = x_train.shape[1] #num of columns
nfeatures

# 메모리 정리
clear_session()

# Sequential 
model = Sequential( Dense( 3 , input_shape = (nfeatures,), activation = 'softmax') )

# 모델요약
model.summary()

 

 

(2) compile + 학습

model.compile(optimizer=Adam(learning_rate=0.1), loss= 'sparse_categorical_crossentropy')

history = model.fit(x_train, y_train, epochs = 50,
                    validation_split=0.2).history

 

(3) 예측 및 검증

pred = model.predict(x_val)
pred[:5]

# 5개 행만 살펴보면
np.argmax(pred[:5], axis = 1)

# 전체에 적용해서 변환합시다.
pred_1 = pred.argmax(axis=1)
pred_1

y_val

print(confusion_matrix(y_val, pred_1))
print(classification_report(y_val, pred_1))

 

 

 

모델 저장 및 사용

## DNN
## 1) 불러오기

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.backend import clear_session
from sklearn.metrics import accuracy_score

# 메모리 정리
clear_session()

## 2) 선언하기
nfeatures = train_x.shape[1] #num of columns
model_DNN = Sequential()

# 스케일링
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
train_x = scaler.fit_transform(train_x)
test_x =scaler.transform(test_x)

# 입력 레이어
model_DNN.add(Dense(8, activation='relu'))
# model_DNN.add(Dropout(0.5)) # Dropout은 신경망에서 뉴런의 일부를 무작위로 비활성화하여 과적합을 방지

#은닉 레이어
model_DNN.add(Dense(6, activation='relu'))
# model_DNN.add(Dropout(0.3))

# 출력 레이어
model_DNN.add(Dense(4,input_shape = (nfeatures,) ,activation='softmax'))

## target값 라벨링하기 {'뇌경색':0, '뇌출혈':1, '복부손상':2, '심근경색':3}

labeling = {'뇌경색':0, '뇌출혈':1, '복부손상':2, '심근경색':3}

train_y_1 = train_y.replace(labeling)
test_y_1 = test_y.replace(labeling)
## 3) 학습하기

model_DNN.compile(optimizer='adam', loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
history = model_DNN.fit(train_x,train_y_1, epochs = 1000, validation_split = 0.2).history

## 4) 예측하기
pred_DNN =  model_DNN.predict(test_x)

## 5) 평가하기, np.argmax(pred_DNN, axis=1)

pred_DNN = np.argmax(pred_DNN, axis=1)

print(accuracy_score(test_y_1, pred_DNN))

## 모델 저장하기

#머신러닝 모델인 경우
import joblib
joblib.dump(model_XGC, '119_model_XGC.pkl')

#딥러닝 모델인 경우
model_DNN.save('119_model_DNN.keras')

# 모델 불러오기

# 머신러닝 모델인 경우

# import joblib
# model_m = 

# 딥러닝 모델인 경우

from keras.models import load_model
model_d = load_model('119_model_DNN.keras')

 

728x90

+ Recent posts