AI
น้องๆ หลายคนอาจจะงงว่า Machine Learning (ML), Python, Sklearn มันเกี่ยวข้องกันยังไง? สมัยผมทำร้านเน็ตฯ ใหม่ๆ ยังไม่มีอะไรพวกนี้เลย (ฮา) แต่บอกเลยว่ายุคนี้มันสำคัญมากๆ เพราะมันช่วยให้คอมพิวเตอร์ "เรียนรู้" จากข้อมูลได้เอง โดยที่เราไม่ต้องเขียนโปรแกรมสั่งทุกขั้นตอน
คิดง่ายๆ เหมือนสมัยก่อนเราต้องป้อนสูตรโกงเกมส์ทีละตัว แต่ ML คือสอนให้คอมพิวเตอร์มันหาทางโกงเอง! (เปรียบเทียบให้เห็นภาพเฉยๆ นะน้อง อย่าเอาไปใช้จริงๆ ล่ะ)
Python ก็คือภาษาโปรแกรมมิ่งที่ฮิตมากในวงการ ML เพราะมันอ่านง่าย มี library (เหมือน plugin สำเร็จรูป) เยอะแยะ Sklearn ก็คือหนึ่งใน library เหล่านั้นแหละ เป็นพระเอกของเราวันนี้เลย เพราะมันทำให้การทำ ML ง่ายเหมือนปอกกล้วยเข้าปาก (ถ้าเข้าใจหลักการนะ)
ทำไมถึงสำคัญ? เพราะมันเอาไปใช้ได้แทบทุกวงการ ตั้งแต่แนะนำหนังให้ถูกใจ (Netflix), ตรวจจับการโกง (Bank), หรือแม้กระทั่งช่วยหมอวินิจฉัยโรค (Hospital) SiamCafe Blog ก็มีใช้ ML นะเว้ย ไม่ใช่แค่ร้านเน็ตฯ เก่าๆ อย่างเดียว (หัวเราะ)
อันนี้ขาดไม่ได้เลยน้อง อย่างน้อยต้องรู้จัก variable (ตัวแปร), loop (วนซ้ำ), function (ฟังก์ชัน) พวกนี้ ถ้ายังไม่คล่อง ลองไปหา tutorial ในเน็ตดูก่อน มีเยอะแยะมากมาย
ยกตัวอย่าง code ง่ายๆ:
# ตัวแปร
name = "Bom"
age = 40
# ฟังก์ชัน
def say_hello(name):
print("Hello, " + name + "!")
say_hello(name)
ไม่ต้องถึงกับต้องจบด็อกเตอร์สถิตินะน้อง เอาแค่เข้าใจ concept พื้นฐาน เช่น ค่าเฉลี่ย (mean), ส่วนเบี่ยงเบนมาตรฐาน (standard deviation), ความน่าจะเป็น (probability) ก็พอแล้ว เพราะพวกนี้มันจะโผล่มาใน algorithm ต่างๆ ที่เราจะใช้
สมัยผมเรียน ผมก็ไม่ชอบสถิติเท่าไหร่ แต่พอมาทำ ML จริงๆ ถึงรู้ว่ามันสำคัญขนาดไหน
ML มันกิน data เป็นอาหาร Data คือข้อมูลทุกอย่างที่เราเก็บมาได้ ตั้งแต่ข้อมูลลูกค้า, ข้อมูลการขาย, ข้อมูลเซ็นเซอร์, หรือแม้กระทั่งรูปแมว Data ที่ดีต้องสะอาด (ไม่มีค่าว่าง), ถูกต้อง (ไม่มั่ว), และมีประโยชน์ (เอาไปใช้ได้) ถ้า data ห่วย ML ก็ออกมาห่วยตาม
Sklearn มันออกแบบมาให้ใช้งานง่ายมากๆ น้องๆ ไม่ต้องกลัวว่าจะยากเกินไป หลักๆ คือเราต้อง import library, เตรียม data, เลือก model, train model, แล้วก็ predict
เหมือนเราทำอาหารอ่ะ น้องต้องมีวัตถุดิบ (data), เลือกสูตร (model), ปรุง (train), แล้วก็ชิม (predict) ถ้าไม่อร่อยก็ต้องปรับสูตรใหม่
ก่อนอื่นต้องติดตั้ง Sklearn ก่อนนะน้อง ถ้าใช้ Anaconda (แนะนำ) ก็เปิด Anaconda Prompt แล้วพิมพ์:
conda install scikit-learn
ถ้าใช้ pip (อีกวิธี) ก็พิมพ์:
pip install scikit-learn
สมมติว่าเรามี data เกี่ยวกับบ้าน ราคาบ้าน ขนาดบ้าน จำนวนห้องนอน แล้วเราอยากจะทำนายราคาบ้านจากข้อมูลพวกนี้ เราก็ต้องเตรียม data ให้อยู่ใน format ที่ Sklearn เข้าใจ เช่น Pandas DataFrame
import pandas as pd
# สร้าง DataFrame จำลอง
data = {'Size': [100, 150, 200, 120, 180],
'Bedrooms': [2, 3, 3, 2, 4],
'Price': [200000, 300000, 400000, 250000, 350000]}
df = pd.DataFrame(data)
# แยก features (X) และ target (y)
X = df[['Size', 'Bedrooms']]
y = df['Price']
Sklearn มี model ให้เลือกเยอะแยะมากมาย แต่สำหรับตัวอย่างนี้ เราจะใช้ Linear Regression ซึ่งเป็น model ง่ายๆ ที่ใช้ทำนายค่าต่อเนื่อง
from sklearn.linear_model import LinearRegression
# สร้าง model
model = LinearRegression()
# Train model ด้วย data
model.fit(X, y)
# ทำนายราคาบ้านใหม่
new_data = [[160, 3]] # ขนาด 160 ตารางเมตร, 3 ห้องนอน
predicted_price = model.predict(new_data)
print("Predicted price:", predicted_price[0])
หลังจาก train model เสร็จแล้ว เราต้องประเมินผลว่า model เราแม่นยำแค่ไหน Sklearn มี metrics ให้เลือกใช้หลายแบบ เช่น Mean Squared Error (MSE), R-squared (R2)
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# แบ่ง data เป็น training set และ testing set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train model ด้วย training set
model.fit(X_train, y_train)
# ทำนายราคาบ้านด้วย testing set
y_pred = model.predict(X_test)
# คำนวณ MSE และ R2
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("Mean Squared Error:", mse)
print("R-squared:", r2)
ถ้าผลลัพธ์ไม่ดี เราก็ต้องปรับปรุง model อาจจะลองเปลี่ยน algorithm, เพิ่ม features, หรือปรับ hyperparameters (ค่าที่ใช้ควบคุมการทำงานของ algorithm) SiamCafe Blog เราก็มีบทความเกี่ยวกับการปรับปรุง model นะ ลองไปอ่านดู
Sklearn ไม่ใช่ library เดียวที่ใช้ทำ ML ใน Python ยังมีทางเลือกอื่นอีก เช่น TensorFlow, PyTorch แต่ละตัวก็มีข้อดีข้อเสียต่างกัน
| Library | ข้อดี | ข้อเสีย | เหมาะกับ |
|---|---|---|---|
| Sklearn | ใช้งานง่าย, เหมาะสำหรับมือใหม่, มี algorithm ให้เลือกเยอะ | ไม่เหมาะกับ deep learning เท่า TensorFlow/PyTorch | งาน ML ทั่วไป, prototype |
| TensorFlow | เหมาะกับ deep learning, มี ecosystem ใหญ่, รองรับการทำงานบน GPU | ซับซ้อนกว่า Sklearn, learning curve สูง | deep learning, image recognition, natural language processing |
| PyTorch | ใช้งานง่ายกว่า TensorFlow, dynamic computation graph, เหมาะกับการวิจัย | ecosystem เล็กกว่า TensorFlow | deep learning, research |
สรุปคือ ถ้าเพิ่งเริ่มต้น Sklearn คือตัวเลือกที่ดีที่สุด แต่ถ้าอยากทำ deep learning ก็ต้องไป TensorFlow/PyTorch
ดูวิดีโอเพิ่มเติมเกี่ยวกับMachine Learning Python Sklear:
เอาล่ะน้องๆ มาถึงตรงนี้แล้ว แสดงว่าเริ่มสนใจ Machine Learning จริงจังแล้วใช่ไหม? สมัยผมทำร้านเน็ต SiamCafe เนี่ย เรื่องคอมพิวเตอร์มันก็เหมือนดาบสองคม ยิ่งเก่งก็ยิ่งต้องระวัง เพราะมีคนอยากลองของเยอะ (หัวเราะ) Machine Learning ก็เหมือนกัน ยิ่งแม่น ยิ่งต้องระวังเรื่อง Bias และ Overfitting เดี๋ยวจะเล่าให้ฟัง
สมัยก่อนตอนเริ่มทำเว็บ SiamCafe.net เนี่ย ผมเขียน code แบบไม่คิดเยอะ (ยอมรับเลย) คืออยากได้อะไรก็ยัดๆๆ เข้าไป แต่พอมาทำ Machine Learning เนี่ย ต้องเปลี่ยน mindset เลยนะ น้องต้องเข้าใจ Data ของน้องก่อนว่ามันคืออะไร มี distribution แบบไหน มี missing values หรือเปล่า
ยกตัวอย่างง่ายๆ ถ้าน้องจะ train model ทำนายว่าลูกค้าคนไหนจะซื้อกาแฟ iCafeForex น้องต้องรู้ก่อนว่า ลูกค้าส่วนใหญ่เป็นใคร ชอบกาแฟแบบไหน ซื้อเวลาไหน บลาๆๆๆ ถ้าไม่รู้ข้อมูลพวกนี้ train ไปก็เท่านั้นแหละ
Feature Engineering คือการแปลง Data ให้น้อง Machine Learning มันเข้าใจง่ายขึ้น สมมติว่าน้องมีข้อมูลวันที่เกิดของลูกค้า น้องอาจจะ extract ออกมาเป็น "อายุ" หรือ "ฤดูกาลที่เกิด" ก็ได้
สมัยผมทำร้านเน็ต ผมสังเกตว่าเด็กที่เล่นเกม Counter-Strike จะชอบสั่งโค้กกับขนมขบเคี้ยวเป็นพิเศษ อันนี้แหละคือ Feature Engineering ที่ได้จากประสบการณ์จริง! เอาไปประยุกต์ใช้ได้เลย
Overfitting คือปัญหาที่ Machine Learning มัน "จำ" Data Train มากเกินไป จนไม่สามารถ Predict Data ใหม่ๆ ได้ Cross-Validation คือวิธีป้องกัน Overfitting ที่ดีที่สุด
ง่ายๆ คือเราจะแบ่ง Data ออกเป็นหลายๆ ส่วน (folds) แล้วสลับกัน Train และ Test หลายๆ รอบ เพื่อให้มั่นใจว่า Model ของเรามันไม่ได้ "จำ" Data Train แค่อย่างเดียว
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
scores = cross_val_score(model, X, y, cv=5) # cv=5 คือแบ่งเป็น 5 folds
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Hyperparameters คือค่าที่ Model มันปรับไม่ได้เอง น้องต้องเป็นคนกำหนดให้ ยกตัวอย่างเช่น ค่า C ใน Logistic Regression หรือ ค่า K ใน K-Nearest Neighbors
Grid Search คือวิธีหา Hyperparameters ที่ดีที่สุด โดยการลองทุก Combination ที่เป็นไปได้ (แต่ต้องระวังเรื่อง Computational Cost นะ)
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
param_grid = {'C': [0.1, 1, 10, 100]}
grid = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid.fit(X, y)
print("Best parameters: {}".format(grid.best_params_))
print("Best cross-validation score: {:.2f}".format(grid.best_score_))
อันนี้แหละที่ผมบอกว่าต้องระวังเรื่อง Bias และ Overfitting บางที Data Train กับ Data จริงมันไม่เหมือนกัน หรือ Model มัน "จำ" Data Train มากเกินไป
หลักๆ ก็มี Numpy, Pandas, Scikit-learn ครับ แต่ถ้าจะทำ Deep Learning ก็ต้องมี TensorFlow หรือ PyTorch เพิ่มเข้ามาด้วย
ช่วงแรกๆ อาจจะงงๆ หน่อย แต่ถ้าตั้งใจจริง ไม่ยากเกินไปแน่นอนครับ สมัยผมเริ่มทำเว็บ SiamCafe.net ก็ไม่รู้เรื่องอะไรเลย ค่อยๆ เรียนรู้ไปเรื่อยๆ
เริ่มจาก Data ที่น้องสนใจก่อนครับ แล้วลองทำตาม Tutorial ง่ายๆ ดู ลองผิดลองถูกไปเรื่อยๆ เดี๋ยวก็เก่งเอง SiamCafe Blog มีบทความดีๆ เยอะเลย ลองเข้าไปอ่านดู
Machine Learning ไม่ใช่เรื่องยาก แต่ก็ไม่ใช่เรื่องง่าย น้องต้องเข้าใจ Data, Feature Engineering, Cross-Validation และ Grid Search ถึงจะสามารถสร้าง Model ที่แม่นยำและใช้งานได้จริงได้ ที่สำคัญคือต้องลงมือทำเยอะๆ ครับ
อย่าลืมว่า Data is the new oil! ถ้าใครมี Data ดีๆ อยู่ในมือ ก็มีโอกาสสร้างธุรกิจที่ยิ่งใหญ่ได้ อย่าง iCafeForex ก็ใช้ Data ในการวิเคราะห์เทรนด์ตลาด และพัฒนา Product ให้ตรงใจลูกค้า