หัวข้อที่จดๆใน Live Class จดได้ปประมาณนี้
What is Machine Learning (ML)
- Arthur Samuel (1959) - ability to learn without being explicitly programmed.
Key: Maximize Reward / Minimize Pain
ตอนนี้ ML มี 2 แบบ
- Classic ML คือ ML ที่เก่งกับ Structure Data
- Modern ML คือ ML ที่ปรับเพิ่มเติมกับ Unstructured Data พวกเสียง Video
เรียนรู้จาก Data ถ้าคนเรา คือ Experience (ประสบการณ์)
FLOW |-> COMPUTER ---> TASK ---> PERFORMANCE --(feedback) -| | | |--------------EXPERIENCE <----------------------------|
Model มันแยกย่อยได้อีก parametric - เช่น พวก regression / non-parametric (rule base) เช่น Decision Tree ก็ if-else โดยตัว Model มันเขียนในรูปแบบ Function ได้ตามนี้ Model = Machine Learning Algorithm(Data)
Why ML is different from statistics
Statistics / Machine Learning เอา Sample จาก Population โดยทีา
📊 Statistics มา ตอบข้อมูลที่มีอดีต
🤖 Machine Learning เอา Sample จาก Population มา ตอบข้อมูลในอนาคต >> เพราะ history repeat itself + new data ให้ตามทัน
Simple ML Pipeline
Full Data --> TRAIN DATA 80% --> TRAIN MODEL --> SCORE MODEL --> EVALUATE MODEL
| ^
--> TEST DATA 20% ------------------------|
- Full Data โดย
-Randoms Spiltมาทำ Train / Test Data แบ่ง 80 / 20 หรือ 70/30
- จากนั้น Prep Data Train ทำ Exploratory Data Analysis เข้าใจภาพรวมข้อมูล ทำ Normalize จาก Z Score และไปปรับทาง Test ต่อ - Train model - สร้าง Model
- Score model - เอา Model ไปลองทำนายจากข้อมูล Test โดยจะได้ root mean square / precision recall /accuracy
ถ้า Accuracy ตอน TRAIN > SCORING ไม่ดี มัน overfit ไป
- Evaluate model - สรุปผลว่า Model มันผ่านเกณฑ์ หรือยัง ทั้งในมุม Technical + Business นะ เอาง่ายๆ ลงทุนแล้วได้กำไรเท่าไหร่ คนที่ตัดสิน CEO CFO MKT คนให้ Requirement แล้วมาตรงลงกัน เช่น ไปหา Accuracy เพิ่มขึ้นจะได้คุ้มทุน
- OUTPUT > Model บอก อะไร
- OUTCOME > ผลกับ Business
Process ไม่ได้ทำแล้วจบไปนะ มันจะเป็น Iterative Process เอาข้อมูลเข้าไป Retain เรื่อยๆ จนกว่า Evaluate พร้อมใช้งานจริง ใช้เวลา + ข้อมูลพอสมควรเลย
Key generalize new / unseen data ได้ ไม่ใช่ทำนายถูกแค่ training
Machine Learning Type
Keyword
- dataset - ข้อมูลตาม domain เช่น BostonHousing
- data points ข้อมูลแต่ละแถวใน data set อาจจะมีชื่ออื่น เช่น record / observation
- overfitting - model เป็นสิงห์สนามซ้อม Accuracy ตอน Train ดันมากกว่าตอน Test หรือ Validation แบบเยอะมาๆ อันนี้แก้โดย Resampling

🤖 Supervise Learning (Prediction/Analytic)
Feature1 | Feature2 | Feature3 | Label ---------|----------|----------|------ 1.2 | A | CC | 3.8 2.5 | B | CC | 6.1 # feature ตัวแปรต้น # label คำตอบ เราจะให้ Model ความเข้าใจส่วนนึงก่อน และทำนายที่เหลือ
ทำนายผล Column feature ค่าตั้งต้น แล้วมี Column นึงให้มันทำนาย label โดยมี Model (Algorithm)
- Regression (Numeric) เช่น Linear Regression
- Classification (Category / factor) เช่น Logistic Regression
🤖Unsupervised Learning (Summaries Data / Pattern / Association)
Feature1 | Feature2 | Feature3 | ---------|----------|----------| 1.2 | A | CC | 2.5 | B | CC |
มีแต่ Feature มี 3 แบบ
- Clustering จัดกลุ่ม เช่น K-means
- Association หรือ market Basket Analysis หาความสัมพันธ์
- Dimension Reduction - ถ้า Data Set มี 1000 Column เราจะลด Column หรือ Feature ให้เหลือ 15 Column ทำให้น้อยลง ทำงานไวขึ้น โดยตัวที่ลดลงจะเรียกว่า Components
🤖 Reinforcement Learning เรียนรู้เพิ่มเติม

อันนี้ Concept ใกล้กับ AI ที่เราอยู่ตอนนี้ ตัวอย่างง่ายๆการสอนน้องหมา ถ้าเราเรียกมันด้วยการปรบมือ แล้วให้ขนม (Reward) มันจะจำได้ เราทำอีกรอบแล้วมันทำผิด ไม่ให้ขนม
มันจะเรียนรู้ว่า Action อะไร ได้ผลตอบแทน Reward อะไร
เหมือนเคยจดไว้ตอนก่อนเรียน ป โท ตอนนั้นเทียบกับ Data Mining มั้ง สุดท้ายมาสาย Software Eng ยังแอบเสียดาย
train test validate อิหยัง ?
นอกจาก Idea แบ่ง Data สำหรับ Train / Test ตามสัดส่วนแล้ว ยังมีอีกแนวคิด แบ่งเป็น 3 ส่วนเลย train / test /* validate ส่วน test / validate ทำหน้าที่คล้ายๆ ช่วยตรวจ
ตัวอย่างที่แอดสอน จะใช้กับ Time Series Data เช่น อยากรู้ของปีถัดไป อย่าง เช่น
| Train Data เดือน 1-8 | Test Data เดือน 9-10 | Validate Data เดือน 11-12 |
ควรมี Data ขนาดไหนถึงเอามา Train ML ได้ ?
- ปกติใช้ประมาณ 2-5 ปี แต่ต้องดูความถี่ในการจัดเก็บด้วย (granularity)
- ถ้า 2 ปี เก็บรายไตรมาส มี 8 แถว มันน้อยเกินไป
Why Resampling ?
อ๋อเข้าใจแล้วว่าทำไมถึงต้องผ่าน Stat มาก่อน
บางทีเราได้ Model แล้วผลลัพธ์ที่แต่ละรอบ score มันเหวี่ยง เลยมีเทคนิคลองเอา Data มาทำหลายๆ และมา Train ดังนี้
📌 leave one out CV
- เก็บ 1 datapoint เอามา test แล้่วที่เหลือเอาไป train model
- ถ้ามี data 1000 datapoint และสลับ data point ที่เป็น test ไปเรื่อยๆจนครบ
- Error Score เอามาเฉลี่ยกัน
วิธีนี้ใช้ Resource เยอะ (Computational Expensive) ถ้ามี 1 ล้าน Data Point ต้องทำ 1 ล้านรอบสลับจนครบ
📌 bootstrap (Idea มาจากนักสถิติ แก้ปัญหาเพราะสมัยนั้น 100 ปีก่อน Data มันน้อย)
- แยก Test Data ออกมาจาก Training เหมือนเดิม เช่น สัดส่วน 30 / 70 ห้ามซ้ำ
- แต่ให้ Training Data Size = Full Data Size ต้องห้ามซ้ำกับ Test Data แสดงว่าใน Training Data จะมี Record ซ้ำแบบสุ่มในแต่ละรอบของการ Train Model
ใน R ตัว caret ใช้เทคนิค bootstrap
📌 k-fold cross validation
- เหมือน Data เป็นกลุ่มตามค่า K ปกติใช้ 5 / 10 และทำแบบ leave one out CV แทนที่จะทำที่ละ Data Point มาสลับที่ละกลุ่ม ถ้า Sample 1000 / K = 5 จะมีกลุ่มละ 200 และสลับกัน
- Train ตาม K+1 รอบ รอบสุดท้ายมาปรับจูน
- Error Score เอามาเฉลี่ยกัน แต่เราสามารถเอาค่า parameter ที่ได้ผลลัลพธ์ที่ดีที่สุดมาใช้งานได้
ถ้าเอามา Adapt กับ Simple ML Pipeline ช่วง Train Model จะเป็นการเลือกเทคนิค Resampling + Algorithm เช่น k-fold cross+Algorithm
Full Data --> TRAIN DATA 80% --> [k-fold cross+Algorithm] --> SCORE MODEL --> EVALUATE MODEL
| ^
--> TEST DATA 20% --------------------------------------|
💡 ถ้าเรามี Data เยอะมากๆ อย่างการทำ Deep Learning การ Resampling อาจจะไม่จำเป็น เพราะมันใช้ Computational Expensive มาก เข้า Flow เดิมเลย แยก TRAIN DATA / TEST DATA และโยนเข้า Algorithm เพื่อ TRAIN MODEL
Sample Algorithm
🥗 K-Nearest Neighbors

พอมี Data Point เข้าไปใหม่ อยากรู้ว่าข้อมูลใหม่ มันใกล้ข้อมูลกลุ่มไหนมากกว่า ปกติมีสูตรวัน อย่างตัว Euclidean_distance
- Choose K
- Compute distance
- Majority vote for classification หรือ ถ้าใช้สำหรับทำนาย Class Average for regression
🥗 Linear Regression

- minimize sse - sum of squre error ระยะที่แต่ละจุด และเอาค่ามาทำนายตัวถัดไป
- การวัดจะวัดจาก MAE/ MSE/ RMSE มีค่าตํ่าที่สุด
ML with Caret in R
🔀 Install ใช้ lib caret ของ R น่าจะเท่ากับพวก scikit learn ?
install.packages("caret")
library(caret)
🔀 Split Data
# 0. Demo DataSet
data("BostonHousing")
df <-BostonHousing
# 1. Split
set.seed(42)
n <- nrow(df)
id <- sample(n, size=0.9*n)
train_data = df[id,]
test_data = df[-id,]
🔀 Call Model / Trainning
- Pattern
- form = formular y เป็นผลัพธ์ ที่มาจากตัวแปรต้น
- method caret-model มี 200 กว่าตัวเลย
model <- train(form = y ~ . ,
data = train_data ,
method = “ALGORITHM” )
- Sample
# 2. Traing (with k-fold)
head(train_data)
# crime - indus distance - rm room - b black people
# medv ราคาบ้านเฉลี่ย
set.seed(42) # fixed knn result
# ที่เรียนมาใช้ได้หมด
# LOOCV - leave one out CV
# boot - bootstrap
# cv - k-fold cross validation
train_ctrl <- trainControl(method = "cv",
number = 5)
model_knn <- train (medv ~ crim + indus + rm + b,
data = train_data,
method = "knn",
metric = "RMSE",
trControl = train_ctrl)
ลองมาดูผลลัพธ์ก่อน
k-Nearest Neighbors 455 samples 4 predictor No pre-processing Resampling: Cross-Validated (5 fold) <<< ตรง trainControl Summary of sample sizes: 364, 364, 364, 365, 363 Resampling results across tuning parameters: k RMSE Rsquared MAE 5 6.580657 0.4801668 4.618687 7 6.681527 0.4649328 4.751312 9 6.724301 0.4559564 4.749602 RMSE was used to select the optimal model using the smallest value. The final value used for the model was k = 5. # พวก Metric # - Rsquared ยิ่งสูงยิงดี # - RMSE / MAE ยิ่งน้อยยิ่งดี # RMSE = sqrt(mean(error^2)) # MAE = mean(abs(error))
🔀 SCORE MODEL + EVALUATE MODEL
เอา Test Data ที่เตรีมไว้มาตรวจ ตอนนี้เรารู้แล้วว่าจาก Model ดีสุด RMSE = 6.580657 ที่ K=5
# 3. Score
pred_medv <- predict(model_knn,
newdata = test_data)
# 4. Evaluate
error <- pred_medv - test_data$medv
test_rmse <- sqrt(mean(error ** 2))
train_rmse <- model_knn$results$RMSE[1]
> test_rmse
[1] 6.95405
> train_rmse
[1] 6.580657
ตรงนี้ Model ไม่ได้ Overfited (train_rmse > test_rmse ) เกินไป
เอาจริงๆ ผมไม่เข้าใจเลยนะ เคยไปฟังที่เค้าสอนจาก Code เข้าใจว่าดูตัว Model ที่ออกตอน Train แล้วเอามาใช้ได้เลย เพิ่งรู้ต้องมาเทียบผลหลัง Predict อีกที คิดว่าน่าจะมีอีกหลายคนเข้าใจผิดแบบผม
model ไหนดีกับ data เรา
- ไม่มีอะไรที่บอกได้แน่นอนนะ แต่แอดทอยแนะนำว่า ยิ่งลองเยอะ มี experiment จะดีขึ้น
- เข้าใจว่าน่าจะรวมถึง Experience ของคนทำด้วย เจอ Data แบบต่างๆ แล้วตัด Choice รู้ว่าต้องการตอบคำถามแบบไหน เช่น ทำนาย (Regression) หรือ จัดกลุ่ม Segment (Clustering) เป็นต้น
- หรือ ถ้าใช้ model ที่ซ้บซ้อน Error น้อยลง เช่น ranger (Random Forest) - ตอนนี้มันมี Service AutoML ที่มาลอง Model ต่างๆให้ แต่ต้องลงทุนเสียเงินนะ ค่า Computed
Random Forest - ถ้ามองง่ายๆ multiple decision trees หลายตัวเอามารวมผลลัพธ์กัน
No Free Lunch (NFL) ของฟรีไม่ใครโลก ขึ้นกับสภาพการณ์เวลานั้น ระหว่าง Data กับ Model โดยที่บาง Model เราอธิบายไม่ได้แต่ Accurancy สูงสุด กับอีก Model ที่น้องลงมาหน่อย ต้องมา weight กัน พยายามเน้นที่เราอธิบายได้ก่อน



