# การสร้าง Model และการวัดประสิทธิภาพของ Model

## BDH X-Brain

**BDH X-Brain** คือ แพลตฟอร์มที่พัฒนาขึ้นเพื่อรองรับการสำรวจข้อมูล (Data Exploration) และการทำป้ายชื่อข้อมูล (Data Labeling) สำหรับการสร้างโมเดล AI พร้อมด้วยระบบการปรับใช้แบบอัตโนมัติ (Automated Deployment) ซึ่งช่วยให้กระบวนการสร้างโมเดล AI เป็นไปอย่างราบรื่น รวดเร็ว และมีประสิทธิภาพสูงสุด แพลตฟอร์มนี้ออกแบบมาเพื่อตอบสนองความต้องการในหลายด้าน ไม่ว่าจะเป็นการศึกษา การวิจัย และการประยุกต์ใช้ในอุตสาหกรรม AI และ Machine Learning&#x20;

## **การฝึกและปรับแต่งโมเดล (Model Training and Tuning)**

1. **Training**: การฝึกโมเดลคือการใช้ข้อมูลที่เตรียมไว้มาสอนให้โมเดลเข้าใจและสร้างความสัมพันธ์ระหว่างข้อมูลเข้าและผลลัพธ์ โมเดลจะพยายามลดข้อผิดพลาดหรือค่าความคลาดเคลื่อนระหว่างผลลัพธ์ที่คาดการณ์กับผลลัพธ์จริง
2. **Hyperparameter Tuning**: การปรับแต่งค่าพารามิเตอร์ของโมเดล เช่น ค่า Learning Rate ใน Neural Networks หรือจำนวนของ Decision Trees ใน Random Forest เพื่อให้โมเดลทำงานได้อย่างมีประสิทธิภาพที่สุด
3. **Cross-Validation**: เทคนิคในการแบ่งข้อมูลออกเป็นหลายส่วนเพื่อประเมินความแม่นยำของโมเดลและลดความเสี่ยงในการ Overfitting หรือการเรียนรู้ข้อมูลเฉพาะเกินไป

## การสร้าง Model และการวัดประสิทธิภาพของ Model (evaluation)

ในส่วนของขั้นตอนนี้จะเป็นขั้นตอนการเรียนรู้เชิงปัญญาประดิษฐ์เพื่อสร้างโมเดลปัญญาประดิษฐ์ (AI Model) สำหรับใช้ในการประมวลผลต่อไป โดยจะมีขั้นตอนการดำเนินงานดังต่อไปนี้

### ขั้นตอนการ การสร้าง Model

1\. ต่อเนื่องจาก **การกำหนดป้ายกำกับ (Data Labeling) ในชุดข้อมูล (Dataset) บน X-Brain** เข้าไปในโปรเจค “Gesture” แท็บเมนู “**Dataset**” เลือกที่ไฟล์ข้อมูลแล้วไปที่เมนู “**Training Model**”

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2Ff4QuL2rrnLKa4XsO2ntx%2Fimage.png?alt=media&#x26;token=7274da5e-de5d-4a81-8984-8592d35788c8" alt=""><figcaption><p>การเลือก Training Model</p></figcaption></figure>

2\. หลังจากกดปุ่มจะมีหน้าต่างการทำงานขึ้นมาให้ผู้เรียนกรอก ซึ่งค่าเหล่านั้นมีดังนี้

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FDA2DCQrouqLfu4wu2Kln%2Fimage.png?alt=media&#x26;token=771cbafa-ff3a-4694-8ce2-76645f50a6ed" alt=""><figcaption></figcaption></figure>

* **Model name:** ตั้งชื่อโมเดลที่ใช้ในการวิเคราะห์หรือทำนายผลลัพธ์
* **Select training:** เลือกประเภทของข้อมูลที่ต้องการจะให้ปัญญาประดิษฐ์เรียนรู้ประกอบไปด้วย
  * **activity:** ข้อมูลที่เกี่ยวกับกิจกรรมของผู้ใช้ เช่น การเดิน การวิ่ง การนั่ง การนอน ซึ่งมักถูกใช้ในการพัฒนาระบบที่สามารถตรวจจับหรือทำนายกิจกรรมที่ผู้ใช้กำลังทำอยู่ในเวลานั้นๆ
  * **health (covid-19):** ข้อมูลที่เกี่ยวข้องกับสุขภาพ เช่น อุณหภูมิร่างกาย อาการที่แสดงออก ซึ่งสามารถนำไปใช้ในการตรวจจับหรือทำนายความเสี่ยงในการติดเชื้อ COVID-19&#x20;
  * **movement (up-side-down):** ข้อมูลการเคลื่อนไหวที่เกี่ยวกับการเปลี่ยนแปลงท่าทาง เช่น การคว่ำหน้าหรือการกลับหัว ซึ่งใช้ในการพัฒนาระบบที่สามารถตรวจจับและตอบสนองต่อการเปลี่ยนแปลงการเคลื่อนไหวของผู้ใช้หรืออุปกรณ์ได้

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FtbWhaMpuabjQwqn6kCCy%2Fimage.png?alt=media&#x26;token=5200cf71-a308-4af3-bcdb-d51239f7d3ed" alt=""><figcaption><p>การเลือกประเภทของข้อมูลที่ให้ Model เรียนรู้</p></figcaption></figure>

* **Select model:** เลือกโมเดลที่เหมาะสมที่สุดสำหรับการวิเคราะห์หรือทำนายผลลัพธ์ประกอบไปด้วย

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2F5k2Q4kar3YRgOFIf8VJ2%2Fimage.png?alt=media&#x26;token=7cc1aaaa-6d50-4842-83e1-0f4234d7ae90" alt=""><figcaption><p>การเลือก Model</p></figcaption></figure>

* **Random Forest**&#x20;
  * **max\_depth:** ความลึกสูงสุดของต้นไม้ในโมเดล **Decision Tree** หรือ **Random Forest** ซึ่งจะจำกัดจำนวนชั้นที่สามารถแบ่งข้อมูลได้ ช่วยป้องกันการ overfitting
  * **n\_estimators:** จำนวนต้นไม้ในโมเดล **Random Forest** หรือจำนวนรอบการเรียนรู้ในโมเดล Ensemble Methods&#x20;
  * **min\_samples\_split:** จำนวนตัวอย่างข้อมูลขั้นต่ำที่จำเป็นในการแบ่ง node หนึ่งๆ ในโมเดล **Decision Tree** ยิ่งมีค่ามาก จะช่วยป้องกัน overfitting
  * **min\_samples\_leaf:** จำนวนตัวอย่างข้อมูลขั้นต่ำที่ต้องมีในแต่ละใบ (leaf) ของต้นไม้ ช่วยควบคุมความซับซ้อนของโมเดล
  * **max\_features:** จำนวนฟีเจอร์สูงสุดที่โมเดลจะพิจารณาในการแบ่งแต่ละครั้งในโมเดล **Random Forest** หรือ **Decision Tree**
  * **Criterion for hyperparameter optimization:** เกณฑ์หรือมาตรฐานที่ใช้ในการปรับค่าพารามิเตอร์ของโมเดลเพื่อเพิ่มประสิทธิภาพ
    * Gini
    * Entropy

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FKQ1PwyErulNFmXdLByTA%2Fimage.png?alt=media&#x26;token=c77b4d20-b74d-49f1-bee0-94b3cdc90890" alt=""><figcaption><p>การเลือกเกณฑ์ในการปรับค่าพารามิเตอร์ของ Model</p></figcaption></figure>

* **Decision Tree**
  * **max\_depth:** ความลึกสูงสุดของต้นไม้ในโมเดล **Decision Tree** หรือ **Random Forest** ซึ่งจะจำกัดจำนวนชั้นที่สามารถแบ่งข้อมูลได้ ช่วยป้องกันการ overfitting
  * **min\_samples\_split:** จำนวนตัวอย่างข้อมูลขั้นต่ำที่จำเป็นในการแบ่ง node หนึ่งๆ ในโมเดล **Decision Tree** ยิ่งมีค่ามาก จะช่วยป้องกัน overfitting
  * **min\_samples\_leaf:** จำนวนตัวอย่างข้อมูลขั้นต่ำที่ต้องมีในแต่ละใบ (leaf) ของต้นไม้ ช่วยควบคุมความซับซ้อนของโมเดล
  * **max\_features:** จำนวนฟีเจอร์สูงสุดที่โมเดลจะพิจารณาในการแบ่งแต่ละครั้งในโมเดล **Random Forest** หรือ **Decision Tree**
  * **Criterion for hyperparameter optimization:** เกณฑ์หรือมาตรฐานที่ใช้ในการปรับค่าพารามิเตอร์ของโมเดลเพื่อเพิ่มประสิทธิภาพ
    * Gini
    * Entropy
* **Gradient Boosting**
  * **max\_depth\_db:** ระดับความลึกสูงสุดของแต่ละต้นไม้ใน **Gradient Boosting** การตั้งค่าพารามิเตอร์นี้จะจำกัดจำนวนระดับของโหนดในแต่ละต้นไม้ ช่วยควบคุมความซับซ้อนของโมเดลและป้องกันการ overfitting
  * **n\_estimators:** จำนวนต้นไม้ในโมเดล **Random Forest** หรือจำนวนรอบการเรียนรู้ในโมเดล Ensemble Methods&#x20;
  * **learning\_rate:** อัตราการเรียนรู้ใน **Gradient Boosting** เป็นค่าที่ลดน้ำหนักของแต่ละต้นไม้ที่ถูกสร้างขึ้นในแต่ละรอบการฝึก ถ้าเรียนรู้ช้า (ค่าต่ำ) โมเดลจะค่อยๆ ปรับตัวและอาจต้องใช้ต้นไม้หลายต้น แต่จะช่วยลดโอกาสเกิด overfitting
  * **subsample:** อัตราส่วนของข้อมูลที่ใช้ในการสร้างแต่ละต้นไม้ใน **Gradient Boosting** ถ้าค่าต่ำกว่าหนึ่ง จะใช้เพียงบางส่วนของข้อมูลเท่านั้น ช่วยเพิ่มความหลากหลายของต้นไม้ ลดความเสี่ยงของ overfitting และเพิ่มความเร็วในการฝึกโมเดล
  * **min\_samples\_split:** จำนวนตัวอย่างข้อมูลขั้นต่ำที่จำเป็นในการแบ่ง node หนึ่งๆ ในโมเดล **Decision Tree** ยิ่งมีค่ามาก จะช่วยป้องกัน overfitting
  * **min\_samples\_leaf:** จำนวนตัวอย่างข้อมูลขั้นต่ำที่ต้องมีในแต่ละใบ (leaf) ของต้นไม้ ช่วยควบคุมความซับซ้อนของโมเดล
  * **Criterion for hyperparameter optimization:** เกณฑ์หรือมาตรฐานที่ใช้ในการปรับค่าพารามิเตอร์ของโมเดลเพื่อเพิ่มประสิทธิภาพ
    * squared\_error
    * friedman\_mse&#x20;

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FqMJr6D9bddVV5Aufnwj4%2Fimage.png?alt=media&#x26;token=12e30311-dd9c-491b-ad6c-bb6c116c23ba" alt=""><figcaption><p>การเลือกเกณฑ์ในการปรับค่าพารามิเตอร์ของ Model</p></figcaption></figure>

* **Test size:** สัดส่วนของข้อมูลที่ใช้สำหรับทดสอบโมเดล เพื่อประเมินความแม่นยำและประสิทธิภาพของโมเดล (มักจะระบุเป็นเปอร์เซ็นต์ เช่น 20% ในระบบ 0.20)

3\. เมื่อกรอกข้อมูลเรียบร้อยให้ทำการกดปุ่ม "**Train Model**" เพื่อเริ่มการเรียนรู้ข้อมูล หลังจากนั้นแพลตฟอร์มจะเริ่มเรียนรู้ข้อมูล

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FA96MnfpRU3zZ7HJGJf54%2Fimage.png?alt=media&#x26;token=72f71b78-1e26-41e6-a000-c6e4685f4862" alt=""><figcaption><p>การเริ่ม Train Model</p></figcaption></figure>

4\. หลังจากที่กระบวนการเรียนรู้เสร็จสิ้นจะปรากฏผลลัพธ์โมเดลขึ้นมาดังตัวอย่างรูปภาพด้านล่าง

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2Fnvoy4R9RCMaTePgicDvb%2Fimage.png?alt=media&#x26;token=86054df8-1118-4f87-8519-1d12f98cb60f" alt=""><figcaption><p>ผลลัพธ์ที่ได้จากการ train model</p></figcaption></figure>

* **X.shape =(8000, 6), X\_test.shape = (2000, 6):** หมายถึงขนาดของชุดข้อมูลฝึกอบรมและทดสอบ โดยชุดข้อมูลฝึกอบรม (X) มีตัวอย่างข้อมูลจำนวน **8000** แถว และมีคุณลักษณะ (features) จำนวน 6 ตัว ส่วนชุดข้อมูลทดสอบ (X\_test) มีตัวอย่างข้อมูลจำนวน 2000 แถว และมีคุณลักษณะจำนวน 6 ตัว
* **Test Accuracy: 99.50%:** ค่านี้แสดงถึงความแม่นยำของโมเดลบนชุดข้อมูลทดสอบ ซึ่งบอกถึงความสามารถของโมเดลในการทำนายข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน ในที่นี้มีค่าความแม่นยำที่ 99.50%
* **BentoML deployment service URL:** URL นี้เป็นตำแหน่งที่โมเดลที่ฝึกเสร็จแล้วถูกนำไปใช้งานผ่านสำหรับการ deploy โมเดลแมชชีนเลิร์นนิง
* **Trained Model Hyperparameters:** เป็นรายการของพารามิเตอร์ที่ใช้ในการฝึกโมเดล **Decision Tree** แต่ละพารามิเตอร์จะมีผลต่อพฤติกรรมของโมเดล

5\. หลังจากนั้นให้ไปที่เมนู "**AI Model**" จะปรากฎผลลัพธ์ดังรูปภาพด้านล่าง ซึ่งในตอนเริ่มต้นจะว่างเปล่า แต่ปัจจุบันจะแสดงผลไฟล์ model ที่ผ่านการ train model ขึ้นมาในหน้าต่างนี้

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FjgXjt5iQgrslyo96ahFm%2Fimage.png?alt=media&#x26;token=1a7b18fb-f704-4a5a-804c-9e120d9b7ab0" alt=""><figcaption><p>ไฟล์ข้อมูลที่ได้จากการสร้าง Model</p></figcaption></figure>
