หัวข้อที่จดๆใน 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
No Free Lunch (NFL) ของฟรีไม่ใครโลก ขึ้นกับสภาพการณ์เวลานั้น ระหว่าง Data กับ Model โดยที่บาง Model เราอธิบายไม่ได้แต่ Accurancy สูงสุด กับอีก Model ที่น้องลงมาหน่อย ต้องมา weight กัน พยายามเน้นที่เราอธิบายได้ก่อน
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.