เริ่มต้นเรียนรู้ Machine Learning ด้วย Python และ Scikit-Learn บน Google Colab

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
opj
PHP Hero Member
PHP Hero Member
โพสต์: 195
ลงทะเบียนเมื่อ: 16/12/2024 9:05 am

เริ่มต้นเรียนรู้ Machine Learning ด้วย Python และ Scikit-Learn บน Google Colab

โพสต์ที่ยังไม่ได้อ่าน โดย opj »

Machine Learning หรือการเรียนรู้ของเครื่อง เป็นเทคโนโลยีที่ช่วยให้คอมพิวเตอร์สามารถเรียนรู้จากข้อมูลและตัดสินใจได้โดยอัตโนมัติ ซึ่งกำลังมีบทบาทสำคัญในหลายอุตสาหกรรม เช่น การแพทย์ การเงิน และการตลาด

Python เป็นภาษาที่ได้รับความนิยมในงาน Machine Learning เพราะใช้งานง่ายและมีไลบรารีที่ทรงพลัง เช่น NumPy และ Pandas สำหรับจัดการข้อมูล Matplotlib และ Seaborn สำหรับวิเคราะห์ข้อมูล และ Scikit-Learn สำหรับสร้างโมเดล Machine Learning

บทเรียนนี้จะพาคุณไปรู้จักขั้นตอนสำคัญ ตั้งแต่การเตรียมข้อมูล การสร้างโมเดล การฝึกสอน และการประเมินผล ด้วยตัวอย่างที่เข้าใจง่าย เพื่อช่วยให้คุณเข้าใจ Machine Learning มากยิ่งขึ้น

พื้นฐานที่ควรรู้ก่อน Machine Learning
  1. Python Basics
    พื้นฐาน Python เช่น
    การใช้ตัวแปร (variables), ลูป (loops), ฟังก์ชัน (functions), และ list comprehension
  2. NumPy และ Pandas
    การจัดการข้อมูล (Data Manipulation) และการคำนวณ (Numerical Computing)
  3. Matplotlib และ Seaborn
    การวิเคราะห์ข้อมูลด้วยการวาดกราฟ (Data Visualization)
เริ่มต้น Machine Learning
  • ความเข้าใจพื้นฐานเกี่ยวกับ Machine Learning Machine Learning แบ่งออกเป็น 3 ประเภทหลัก
    • Supervised Learning: มีข้อมูลพร้อมคำตอบ เช่น การทำนายราคาบ้าน
    • Unsupervised Learning: ไม่มีคำตอบ เช่น การจัดกลุ่มลูกค้า
    • Reinforcement Learning: เรียนรู้จากการลองผิดลองถูก เช่น การควบคุมหุ่นยนต์
  • คำศัพท์สำคัญ
    • Feature: ตัวแปรอิสระ (Input)
    • Label/Target: ตัวแปรเป้าหมาย (Output)
    • Model: แบบจำลองที่เรียนรู้จากข้อมูล
    • Training และ Testing: การแบ่งข้อมูลเพื่อฝึกสอนและทดสอบ
เริ่มเขียนโค้ดด้วย Scikit-Learn
Scikit-Learn เป็นไลบรารียอดนิยมสำหรับการสร้างและใช้งาน Machine Learning โมเดลใน Python ไลบรารีนี้ใช้งานง่าย ครอบคลุมตั้งแต่การเตรียมข้อมูล การสร้างโมเดล ไปจนถึงการประเมินผล
  1. โครงสร้างพื้นฐานของ Scikit-Learn
    การทำงานของ Scikit-Learn สามารถแบ่งออกเป็นขั้นตอนหลักๆ ดังนี้
    1. เตรียมข้อมูล (Prepare Data)
      จัดการข้อมูลในรูปแบบที่เหมาะสม เช่น NumPy หรือ Pandas
    2. แบ่งชุดข้อมูล (Train-Test Split)
      ใช้ train_test_split() เพื่อแยกข้อมูลสำหรับฝึกสอนและทดสอบ
    3. สร้างและฝึกโมเดล (Build and Train the Model)
      ใช้คลาสจาก Scikit-Learn เช่น LinearRegression, KNeighborsClassifier
    4. ทำนายผล (Make Predictions)
      ใช้ model.predict() เพื่อทำนายผล
    5. ประเมินผล (Evaluate Model)
      ใช้ Metrics เช่น accuracy_score, mean_squared_error
  2. ตัวอย่างโค้ดพื้นฐานใน Scikit-Learn
    1. Linear Regression
      ตัวอย่างนี้เป็นการทำนายข้อมูลอย่างง่ายด้วย Linear Regression โดย Linear Regression จะเป็นความสัมพันธ์ของตัวแปรหรือสิ่งที่เรากำลังสนใจ ซึ่งจะถูกใช้กับการคำนวณค่าที่เป็นตัวเลข เพื่อหาความสัมพันธ์หรือทำนายข้อมูลต่าง ๆ

      โค้ด: เลือกทั้งหมด

      # นำเข้าไลบรารี
      import numpy as np
      from sklearn.linear_model import LinearRegression
      from sklearn.model_selection import train_test_split
      from sklearn.metrics import mean_squared_error
      
      # เตรียมข้อมูล
      X = np.array([[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]])  # Feature
      y = np.array([25,35,40,42,51,60,62,72,78,90])  # Target
      
      # แบ่งข้อมูลออกเป็นชุดฝึกสอนและชุดทดสอบ
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
      
      # สร้างโมเดล Linear Regression
      model = LinearRegression()
      
      # ฝึกโมเดลด้วยข้อมูลชุดฝึกสอน
      model.fit(X_train, y_train)
      
      # ทำนายผลลัพธ์ด้วยข้อมูลชุดทดสอบ
      y_pred = model.predict(X_test)
      
      # ประเมินผลลัพธ์
      mse = mean_squared_error(y_test, y_pred)
      print(f"Mean Squared Error: {mse}")
      
      # แสดงค่าพารามิเตอร์ของโมเดล
      print(f"ค่าความชัน (Slope): {model.coef_}")
      print(f"จุดตัดแกน y (Intercept): {model.intercept_}")
      
      ผลลัพธ์ที่ได้
      LinearRegression.png
      LinearRegression.png (31.65 KiB) Viewed 576 times
      อธิบายผลลัพธ์
      • Mean Squared Error (MSE): เป็นตัววัดความแตกต่างระหว่างค่าที่คาดการณ์ (y_pred) กับค่าจริง (y) ยิ่งค่า MSE ต่ำ แสดงว่าโมเดลมีความแม่นยำมากขึ้น
      • ค่าความชัน (Slope): เป็นอัตราการเพิ่มขึ้นของ y ต่อการเปลี่ยนแปลงของ X
        เช่น ถ้าความชัน = 7.44 หมายความว่า เมื่อค่า X เพิ่มขึ้น 1 หน่วย ค่า y จะเพิ่มขึ้นประมาณ 7.44 หน่วย
      • จุดตัดแกน y (Intercept): เป็นค่าของ y เมื่อ X = 0
    2. K-Nearest Neighbors (KNN)
      ตัวอย่างนี้ใช้โมเดล KNN เพื่อจำแนกข้อมูลใน Iris Dataset
      Iris Dataset เป็นตัวอย่างของดอกไม้ 3 ประเภท (Iris Setosa, Iris Versicolour, และ Iris Virginica) เป็นตาราง แต่ละตัวอย่างประกอบด้วยความยาวของใบ (sepal length) ความยาวของกลีบดอกไม้ (petal length) และประเภทของดอกไม้ มีทั้งหมด 50 ตัวอย่าง รวมทั้งหมด 150 ตัวอย่าง

      โค้ด: เลือกทั้งหมด

      # นำเข้าไลบรารี
      from sklearn.datasets import load_iris
      from sklearn.model_selection import train_test_split
      from sklearn.neighbors import KNeighborsClassifier
      from sklearn.metrics import accuracy_score
      
      # โหลดข้อมูล Iris dataset
      iris = load_iris()
      X = iris.data  # Features
      y = iris.target  # Labels
      
      # แบ่งข้อมูลออกเป็นชุดฝึกสอนและชุดทดสอบ
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
      
      # สร้างโมเดล K-Nearest Neighbors 
      model = KNeighborsClassifier(n_neighbors=7)
      
      # ฝึกโมเดล
      model.fit(X_train, y_train)
      
      # ทำนายผลลัพธ์
      y_pred = model.predict(X_test)
      
      # ประเมินผล
      accuracy = accuracy_score(y_test, y_pred)
      print(f"ความแม่นยำ (Accuracy): {accuracy * 100:.2f}%")
      
      วิธีทำงานของ KNN คือ
      • กำหนดค่า K ก่อน โดยที่ K เป็นจำนวนเพื่อนบ้านใกล้ตัวที่อยากจะพิจารณา
      • หาตัวอย่างที่อยู่ใกล้กับจุดทดสอบที่สุดมา K ตัว
      • ดูว่าใน K ตัวอย่างนี้เป็นดอกไม้ประเภทไหนมากที่สุด จำแนกจุดทดสอบเป็นประเภทนั้น
        ง่ายมาก พูดง่ายๆคือให้จุดใกล้ตัว "โหวต" ว่าควรเป็นประเภทไหนนั่นเอง จากตัวอย่างสมมติ K=1 ก็หาจุดที่ใกล้จุดทดสอบที่สุดมาหนึ่งจุด จากภาพจุดนั้นเป็นสีเขียว ก็เลยตอบว่าตัวอย่างทดสอบเป็นดอกไม้ประเภท Versicolour
      การเลือก K เลือกอย่างไร?
      วิธีหนึ่งในการเลือกค่า K ที่ดีที่สุดคือการทำ cross validation แนวคิดคือเราจะแบ่งข้อมูลที่ได้มาเป็นสองส่วน ชุดฝีกสอนกับชุดทดสอบ เลือกค่า K ที่ทำให้จำนวนตัวอย่างในชุดทดสอบถูกจำแนกผิดประเภทน้อยที่สุด
  3. การประเมินผล: Cross-Validation
    Scikit-Learn มีฟังก์ชันสำหรับการตรวจสอบโมเดลด้วย Cross-Validation เพื่อประเมินประสิทธิภาพโมเดล
    Cross-Validation เป็นวิธีการที่ใช้ในการประเมินประสิทธิภาพของโมเดล Machine Learning โดยการแบ่งชุดข้อมูลเป็นหลายๆ ชุดย่อย (folds) เพื่อให้ได้ค่าประเมินที่มั่นคงและลดความเสี่ยงจากการ Overfitting หรือ Underfitting ที่อาจเกิดขึ้นจากการแบ่งข้อมูลแค่ชุดเดียว วิธีนี้ช่วยให้มั่นใจว่าโมเดลมีความสามารถทั่วไป (generalization) ที่ดีในข้อมูลที่ไม่เคยเห็นมาก่อน

    โค้ด: เลือกทั้งหมด

    from sklearn.model_selection import cross_val_score
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.datasets import load_iris
    
    # โหลดข้อมูล
    iris = load_iris()
    X = iris.data
    y = iris.target
    
    # สร้างโมเดล Random Forest
    model = RandomForestClassifier()
    
    # ประเมินโมเดลด้วย Cross-Validation (k=5)
    scores = cross_val_score(model, X, y, cv=5)
    print(f"คะแนน Cross-Validation: {scores}")
    print(f"คะแนนเฉลี่ย: {scores.mean():.2f}")
    
  4. เครื่องมือสำคัญใน Scikit-Learn
    1. Data Preprocessing
      เป็นขั้นตอนหลังจาก Clean data เป็นการเตรียมข้อมูลของเราให้พร้อมนำไปใช้กับ Machine Learning Model เช่น การเลือก Feature หรือ การแปลงข้อความเป็นตัวเลข (ซึ่ง ML โมเดลต้องการ Input ที่เป็นตัวเลขเท่านั้น) ซึ่งต่างจาก Clean data ตรงที่ Clean data จะเน้นไปที่การทำให้ข้อมูลถูกต้องเช่น การจัดการกับข้อมูลประเภท Nan or NULL หรือจัดการกับ Outlier data
      การปรับข้อมูลก่อนใช้งาน เช่น การ Normalize, Scaling
      ตัวอย่างโค้ด

      โค้ด: เลือกทั้งหมด

      from sklearn.preprocessing import StandardScaler
      scaler = StandardScaler()
      X_scaled = scaler.fit_transform(X)
      
    2. Model Selection
      เลือกโมเดลที่เหมาะสม เช่น
      • การทำนาย: LinearRegression, RandomForestRegressor
      • การจำแนกประเภท: KNeighborsClassifier, SVM
    3. Model Evaluation
      ตัวชี้วัดความแม่นยำ เช่น Accuracy, Precision, Recall
      ตัวอย่างโค้ด

      โค้ด: เลือกทั้งหมด

      from sklearn.metrics import accuracy_score, confusion_matrix
      accuracy = accuracy_score(y_test, y_pred)
      print(f"ความแม่นยำ: {accuracy}")
      

สรุป
การเรียนรู้ Machine Learning ด้วย Python และ Scikit-Learn สามารถนำไปปรับใช้กับงานในอนาคตได้หลายด้าน โดยเฉพาะในงานที่เกี่ยวข้องกับการวิเคราะห์ข้อมูล, การทำนาย (Prediction), หรือการจำแนกประเภท (Classification). ตัวอย่างเช่น:
  • พัฒนาโมเดลทำนาย: ใช้ Scikit-Learn เพื่อพัฒนาโมเดลสำหรับทำนายข้อมูลในงานต่างๆ เช่น การทำนายยอดขาย, คาดการณ์สต็อกสินค้า, หรือการทำนายพฤติกรรมของลูกค้า
  • การจำแนกประเภทข้อมูล: ใช้โมเดลในการจำแนกประเภทข้อมูล เช่น การจำแนกประเภทของดอกไม้ใน Iris Dataset หรือการจำแนกประเภทของอีเมลเป็น spam หรือไม่
  • การประเมินและปรับปรุงโมเดล: สามารถใช้เทคนิคต่างๆ เช่น Cross-Validation เพื่อประเมินโมเดลและปรับปรุงประสิทธิภาพ โดยไม่พึ่งพาการแบ่งข้อมูลเพียงครั้งเดียว
  • การปรับใช้กับงานธุรกิจ: Scikit-Learn สามารถนำไปใช้ในการพัฒนาเครื่องมือที่ช่วยตัดสินใจธุรกิจ เช่น การคัดกรองลูกค้าที่มีโอกาสสูงในการซื้อสินค้า หรือการคาดการณ์อัตราการลาออกของพนักงาน
อ้างอิง
https://www.borntodev.com/2021/08/26/ทำความรู้จัก-linear-regression-algorithm/
https://notebook.community/wittawatj/ipynb/notebooks/iris-knn-analysis
https://medium.com/mmp-li/data-preprocessing-นั้นสำคัญอย่างไร-แล้วจะทำเมื่อไหร่-69306f880e68
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 10