ສ້າງ Neural Network ພື້ນຖານສຳລັບການຈັດປະເພດແບບ Binary Classification ດ້ວຍ Keras
ສ້າງ Neural Network ພື້ນຖານສຳລັບການຈັດປະເພດແບບ Binary Classification ດ້ວຍ Keras
ສະບາຍດີນັກພັດທະນາ ແລະ ໝູ່ເພື່ອນທີ່ສົນໃຈໃນດ້ານ AI ທຸກທ່ານ! ມື້ນີ້ເຮົາຈະມາລົງເລິກໃນພາກປະຕິບັດ (Hands-on) ຂອງການສ້າງ Neural Network (NN) ເພື່ອແກ້ໄຂບັນຫາທີ່ພົບເຫັນໄດ້ທົ່ວໄປທີ່ສຸດແບບໜຶ່ງຄື: Binary Classification ຫຼື ການຈັດປະເພດຂໍ້ມູນອອກເປັນ 2 ກຸ່ມ ເຊັ່ນ: ແມ່ນ/ບໍ່ແມ່ນ, ຜ່ານ/ບໍ່ຜ່ານ ຫຼື ຈິງ/ເທັດ.
ເພື່ອໃຫ້ເຫັນພາບທີ່ຊັດເຈນ ແລະ ເຂົ້າກັບບໍລິບົດບ້ານເຮົາ, ເຮົາຈະມາຈຳລອງສະຖານະການກ່ຽວກັບການຄັດເລືອກ ກາເຟປາກຊ່ອງ. ລອງນຶກພາບວ່າ ຖ້າເຮົາມີຂໍ້ມູນກ່ຽວກັບຄຸນລັກສະນະຂອງເມັດກາເຟ (ເຊັ່ນ: ລະດັບຄວາມຊຸ່ມ ແລະ ຄວາມໜາແໜ້ນຂອງເມັດ) ເຮົາສາມາດສ້າງໂມເດວ Machine Learning ທີ່ຊ່ວຍຊາວກະສິກອນ ຫຼື ໂຮງງານຄົ້ວກາເຟ ແຍກແຍະໄດ້ວ່າ ເມັດກາເຟນີ້ເປັນ “ເກຣດພຣີມຽມ” (Premium = 1) ຫຼື “ເກຣດທຳມະດາ” (Standard = 0) ໄດ້ຫຼືບໍ່? ຄຳຕອບຄື: ເຮັດໄດ້ແນ່ນອນ! ແລະ ມື້ນີ້ເຮົາຈະໃຊ້ Keras (High-level API ທີ່ນຳໃຊ້ TensorFlow ເປັນເບື້ອງຫຼັງ) ເຊິ່ງເປັນຫໍສະໝຸດ (Library) ຍອດນິຍົມໃນ Python ມາສ້າງໂມເດວນີ້ໄປພ້ອມໆກັນ.
ໂຈດຂອງພວກເຮົາ: ການແຍກເກຣດກາເຟປາກຊ່ອງ
ໃນຂັ້ນຕອນທຳອິດ, ເຮົາຈຳເປັນຕ້ອງມີຂໍ້ມູນ (Data). ສຳລັບບົດຄວາມນີ້, ເພື່ອໃຫ້ງ່າຍຕໍ່ການທົດລອງ ເຮົາຈະໃຊ້ Library scikit-learn ເພື່ອສ້າງຂໍ້ມູນຈຳລອງ (Synthetic Data) ທີ່ເປັນຕົວແທນຂອງຄຸນລັກສະນະເມັດກາເຟ.
ຜູ້ອ່ານທີ່ເຄີຍຂຽນ Python ມາແລ້ວ ໜ້າຈະຄຸ້ນເຄີຍກັບຄຳສັ່ງເຫຼົ່ານີ້ເປັນຢ່າງດີ:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
# ສ້າງຂໍ້ມູນຈຳລອງເມັດກາເຟ 1,000 ຕົວຢ່າງ
# X: [ລະດັບຄວາມຊຸ່ມ, ຄວາມໜາແໜ້ນຂອງເມັດ]
# y: 0 (ເກຣດທຳມະດາ) ຫຼື 1 (ເກຣດພຣີມຽມ)
X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=42, cluster_std=1.5)
# ແບ່ງຂໍ້ມູນສຳລັບການ Train ແລະ Test ໃນອັດຕາສ່ວນ 80:20
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"ຈຳນວນຂໍ້ມູນສຳລັບຝຶກສອນ (Train): {X_train.shape[0]} ແຖວ")
print(f"ຈຳນວນຂໍ້ມູນສຳລັບທົດສອບ (Test): {X_test.shape[0]} ແຖວ")
ຂັ້ນຕອນການສ້າງ Neural Network ດ້ວຍ Keras
ຫຼັງຈາກເຮົາກຽມຂໍ້ມູນສຳເລັດແລ້ວ, ກໍ່ມາຮອດຈຸດສຳຄັນຄື ການສ້າງສະຖາປັດຕະຍະກຳຂອງໂມເດວ (Model Architecture).
1. ການອອກແບບສະຖາປັດຕະຍະກຳ (Designing the Architecture)
ເນື່ອງຈາກຂໍ້ມູນຂອງເຮົາມີພຽງ 2 ຕົວປ່ຽນ (Features), ເຮົາບໍ່ຈຳເປັນຕ້ອງໃຊ້ Network ທີ່ເລິກ ຫຼື ສັບຊ້ອນເກີນໄປ. ເຮົາຈະສ້າງ Neural Network ແບບ Feedforward ທີ່ປະກອບມີ:
- Input Layer: ຮັບຂໍ້ມູນ 2 ຕົວປ່ຽນ.
- Hidden Layer 1: ມີ 8 Neurons, ແລະ ໃຊ້ Activation Function ແບບ
relu(Rectified Linear Unit) ເພື່ອຊ່ວຍໃຫ້ໂມເດວຮຽນຮູ້ຮູບແບບທີ່ບໍ່ເປັນເສັ້ນຊື່ (Non-linear patterns). - Output Layer: ມີ 1 Neuron ທີ່ໃຊ້ Activation Function ແບບ
sigmoidເຊິ່ງຈະປ່ຽນຄ່າຜົນລັບໃຫ້ເປັນຄ່າຄວາມໜ້າຈະເປັນ (Probability) ທີ່ຢູ່ລະຫວ່າງ 0 ຫາ 1.
2. ການຂຽນໂຄດສ້າງໂມເດວ (Coding the Model)
ການໃຊ້ Keras ເຮັດໃຫ້ການຂຽນໂຄດສ້າງໂລເດວເປັນເລື່ອງທີ່ງ່າຍດາຍ ແລະ ເປັນລະບຽບຫຼາຍ:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# ກຳນົດໂຄງສ້າງໂມເດວແບບ Sequential (ການລຽງລຳດັບຊັ້ນ Layer ຕໍ່ເນື່ອງກັນ)
model = Sequential()
# ເພີ່ມ Hidden Layer ທີ 1
# - input_dim=2 ໝາຍເຖິງ Input ຂອງເຮົາມີ 2 Features (ຄວາມຊຸ່ມ, ຄວາມໜາແໜ້ນ)
model.add(Dense(8, input_dim=2, activation='relu'))
# ເພີ່ມ Output Layer
# - ມີ 1 Neuron ເພາະເປັນ Binary Classification
model.add(Dense(1, activation='sigmoid'))
# ສະແດງລາຍລະອຽດຂອງໂມເດວທີ່ເຮົາສ້າງຂຶ້ນ
model.summary()
3. ການອະນຸມັດ ແລະ ຝຶກສອນ (Compile and Train)
ກ່ອນທີ່ເຮົາຈະເອົາຂໍ້ມູນເຂົ້າໄປ Train, ເຮົາຕ້ອງກຳນົດວິທີການວັດຜົນຄວາມຜິດພາດ (Loss function) ແລະ ວິທີທີ່ໂມເດວຈະປັບປຸງຕົວເອງ (Optimizer). ສຳລັບແກ້ໄຂບັນຫາ Binary Classification, ມາດຕະຖານທີ່ດີທີ່ສຸດແມ່ນການໃຊ້ binary_crossentropy.
# Compile ໂມເດວ
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
# ຝຶກສອນ (Train) ໂມເດວດ້ວຍຂໍ້ມູນ X_train ແລະ y_train
history = model.fit(X_train, y_train,
epochs=50,
batch_size=32,
validation_split=0.2,
verbose=1)
ອະທິບາຍພາຣາມິເຕີເພີ່ມເຕີມ:
epochs=50: ໃຫ້ໂມເດວຮຽນຮູ້ຜ່ານຂໍ້ມູນທັງໝົດ 50 ຮອບ.batch_size=32: ປັບນ້ຳໜັກ (Weights) ຂອງໂມເດວທຸກໆການອ່ານຂໍ້ມູນ 32 ຕົວຢ່າງ.
ການປະເມີນຜົນ ແລະ ນຳໃຊ້ (Evaluation and Prediction)
ພໍໂມເດວຂອງເຮົາຮຽນຮູ້ສຳເລັດ, ເຮົາຕ້ອງທົດສອບມັນດ້ວຍຂໍ້ມູນ Test X_test ທີ່ໂມເດວບໍ່ເຄີຍເຫັນມາກ່ອນ ເພື່ອພິສູດວ່າໂມເດວບໍ່ໄດ້ຈື່ຈຳສະເພາະແຕ່ຂໍ້ມູນ Train (Overfitting).
# ທົດສອບຄວາມແມ່ນຍຳກັບຂໍ້ມູນ Test
loss, accuracy = model.evaluate(X_test, y_test)
print(f"ຄວາມແມ່ນຍຳຂອງໂມເດວໃນການເບິ່ງຂໍ້ມູນໃໝ່ (Test Accuracy): {accuracy * 100:.2f}%")
# ທົດລອງທຳນາຍ (Predict) ເມັດກາເຟໃໝ່ທີ່ຊາວກະສິກອນເກັບມາ
new_coffee_bean = np.array([[2.5, -1.0]]) # ສົມມຸດ: [ຄວາມຊຸ່ມສູງກວ່າປົກກະຕິ, ຄວາມໜາແໜ້ນຕ່ຳ]
prediction = model.predict(new_coffee_bean)
# ການຕັດສິນໃຈ: ຖ້າຄວາມໜ້າຈະເປັນ (Probability) ຫຼາຍກວ່າ ຫຼື ເທົ່າກັບ 0.5 ໃຫ້ເປັນ Premium
if prediction >= 0.5:
print("ຜົນການທຳນາຍ: ☕ ເກຣດພຣີມຽມ (Premium = 1)")
else:
print("ຜົນການທຳນາຍ: ☕ ເກຣດທຳມະດາ (Standard = 0)")
Key Takeaways
- ສະຖາປັດຕະຍະກຳທີ່ເໝາະສົມ: ສຳລັບ Binary Classification, Output Layer ຕ້ອງມີ 1 Neuron ແລະ ໃຊ້ Activation Function ປະເພດ
sigmoidອັນນີ້ແມ່ນກົດປາຍຕົວທີ່ສຳຄັນທີ່ສຸດ. - Loss Function ທີ່ຖືກຕ້ອງ: ຄວນເລືອກໃຊ້
binary_crossentropyເຊິ່ງຈະເຮັດວຽກໄດ້ດີທີ່ສຸດໃນການວັດຄວາມຜິດພາດຂອງ 2 Group ເປົ້າໝາຍ. - ຄວາມສາມາດຂອງ Keras: Keras ເຮັດໃຫ້ການສ້າງ Deep Learning ຈາກທີ່ເຄີຍຕ້ອງຂຽນສົມຜົນທາງຄະນິດສາດທີ່ຊັບຊ້ອນ ກາຍມາເປັນພຽງການໃຊ້ງານ API ທີ່ງ່າຍ, ກະທັດຮັດ.
ສະຫຼຸບແລ້ວ ການສ້າງ Neural Network ໃນປະຈຸບັນບໍ່ແມ່ນເລື່ອງທີ່ຍາກຈົນເຂົ້າບໍ່ເຖິງອີກຕໍ່ໄປ. ດ້ວຍ Framework ຢ່າງ Keras, ນັກພັດທະນາໃນລາວສາມາດນຳເອົາເຕັກໂນໂລຊີ AI ເປັນຕົ້ນແມ່ນການຈັດປະເພດຂໍ້ມູນແບບທີ່ເຮົາທົດລອງຂ້າງເທິງນີ້ ໄປປະຍຸກໃຊ້ກັບລະບົບຕົວຈິງໄດ້ທັນທີ, ບໍ່ວ່າຈະເປັນການແຍກປະເພດສິນຄ້າກະສິກຳຕາມພາກຕ່າງໆ, ສ້າງລະບົບວິເຄາະສິນເຊື່ອສຳລັບ SME ເບື້ອງຕົ້ນ, ຫຼື ແມ້ກະທັ່ງລະບົບແຍກອີເມວຂີ້ເຫຍື້ອ (Spam filter) ໄດ້ຫຼາຍຮູບແບບ. ຫວັງວ່າບົດຄວາມນີ້ຈະຊ່ວຍເປັນພື້ນຖານທີ່ແໜ້ນໜາໃຫ້ທຸກທ່ານນຳໄປຕໍ່ຍອດໃນອະນາຄົດໄດ້ເປັນຢ່າງດີ.