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
'Aivle School 4기 > Aivle School 중간점검' 카테고리의 다른 글
KT Aivle School 에이블스쿨 중간점검] 데이터전처리, 불필요한 부분 제거, 결측치 대체, 중앙값, 최빈값 (0) | 2023.10.30 |
---|---|
KT Aivle School 에이블스쿨 중간점검] 머신러닝 RandomForestClassifier (0) | 2023.10.26 |