เตรียมข้อมูลอย่างไรให้พร้อมสำหรับโมเดล Machine Learning

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

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

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

เตรียมข้อมูลอย่างไรให้พร้อมสำหรับโมเดล Machine Learning

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

การเตรียมข้อมูล (Data Preprocessing) เป็นขั้นตอนสำคัญในการพัฒนาโมเดล Machine Learning ที่มีประสิทธิภาพ การเตรียมข้อมูลที่ดีจะช่วยให้โมเดลสามารถเรียนรู้ได้ดีขึ้น และทำงานได้อย่างมีประสิทธิภาพ การเตรียมข้อมูลมักจะประกอบด้วยหลายขั้นตอน ตั้งแต่การรวบรวมข้อมูลไปจนถึงการปรับแต่งข้อมูลให้เหมาะสมกับโมเดลที่เราจะใช้ ในบทความนี้ เราจะมาพูดถึงขั้นตอนการเตรียมข้อมูลที่สำคัญสำหรับโมเดล Machine Learning
  1. การรวบรวมข้อมูล (Data Collection)
    การรวบรวมข้อมูลเป็นขั้นตอนแรกที่สำคัญในการเตรียมข้อมูล หากไม่มีข้อมูลที่เหมาะสมก็จะไม่สามารถฝึกโมเดลได้ ข้อมูลสามารถมาจากหลายแหล่ง เช่น
    • ฐานข้อมูล (Databases)
    • ไฟล์ CSV หรือ Excel
    • API ที่ให้ข้อมูลจากแหล่งต่าง ๆ
    • การสแครปข้อมูลจากเว็บไซต์ (Web Scraping)
    นอกจากนั้นเรายังต้องตรวจสอบคุณภาพของข้อมูลที่ได้มาเพื่อช่วยให้มั่นใจว่าเรามีข้อมูลที่เพียงพอและเหมาะสมกับปัญหาที่ต้องการแก้ไข
  2. การตรวจสอบและจัดการข้อมูล (Data Cleaning)
    เมื่อได้ข้อมูลแล้ว ขั้นตอนต่อไปคือการ Clean ข้อมูล เนื่องจากข้อมูลจริงอาจมีข้อผิดพลาดหรือไม่สมบูรณ์ ซึ่งอาจส่งผลเสียต่อประสิทธิภาพของโมเดล
    1. การจัดการกับค่าที่ขาดหาย (Handling Missing Values)
      ค่าที่ขาดหายเป็นปัญหาที่พบบ่อยในข้อมูลจริง การจัดการกับค่าที่ขาดหายมีหลายวิธี เช่น
      • การลบแถวหรือคอลัมน์ที่มีค่าหาย: หากข้อมูลที่ขาดหายไม่มากจนเกินไป สามารถลบแถวหรือคอลัมน์ที่มีค่าหายได้
      • การแทนค่าหายด้วยค่าเฉลี่ย (Mean): สำหรับข้อมูลเชิงตัวเลขสามารถแทนค่าที่หายด้วยค่าเฉลี่ยของคอลัมน์นั้นๆ
        ตัวอย่างเช่น

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

        import pandas as pd
        from sklearn.impute import SimpleImputer
        
        # ตัวอย่างข้อมูล
        data = {'age': [25, 30, None, 35, 40],
                'salary': [50000, 60000, 70000, None, 80000]}
        df = pd.DataFrame(data)
        
        # ใช้ SimpleImputer เพื่อแทนค่าที่ขาดหายด้วยค่าเฉลี่ย
        imputer = SimpleImputer(strategy='mean')
        df['age'] = imputer.fit_transform(df[['age']])
        df['salary'] = imputer.fit_transform(df[['salary']])
        
        ผลลัพธ์แสดงดังภาพ
        Missing Values.png
        Missing Values.png (28.64 KiB) Viewed 271 times
      • การใช้เทคนิคอื่นๆ: เช่น การใช้ค่าเฉลี่ยถ่วงน้ำหนัก (weighted mean) หรือการใช้โมเดลที่คาดการณ์ค่าที่ขาดหาย
    2. การจัดการกับค่าผิดพลาด (Handling Outliers)
      ค่าผิดพลาดหรือ outliers คือตัวเลขที่ห่างไกลจากค่าปกติ ซึ่งอาจเกิดจากข้อผิดพลาดในการเก็บข้อมูล หรือข้อมูลที่ผิดปกติ ค่าผิดพลาดอาจมีผลกระทบต่อโมเดล เช่น การทำให้ค่าความแม่นยำของโมเดลต่ำลง วิธีการจัดการกับ outliers ได้แก่
      • การใช้เทคนิคการตรวจสอบค่าผิดปกติ เช่น การใช้ IQR (Interquartile Range) หรือ Z-score
        ตัวอย่างเช่น

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

        import numpy as np
        
        # ตัวอย่างข้อมูล
        data = {'age': [25, 30, 35, 1000, 40]}  # 1000 เป็น outlier
        df = pd.DataFrame(data)
        
        # คำนวณ Z-score
        from scipy.stats import zscore
        df['z_score'] = zscore(df['age'])
        
        # ลบ outliers
        df_no_outliers = df[df['z_score'].abs() < 3]
        
        ผลลัพธ์แสดงดังภาพ
        Outliers.png
        Outliers.png (25.92 KiB) Viewed 271 times
      • การลบข้อมูลที่เป็น outliers หรือใช้การแปลงค่าข้อมูลให้เหมาะสม
    3. การแก้ไขค่าผิดปกติ (Fixing Incorrect Values)
      บางครั้งข้อมูลที่รวบรวมอาจมีข้อผิดพลาดจากการป้อนข้อมูลหรือการเก็บข้อมูลที่ผิดพลาด เช่น ข้อมูลที่มีตัวอักษรแทนตัวเลข การแก้ไขข้อผิดพลาดเหล่านี้จะช่วยให้ข้อมูลมีความถูกต้องมากขึ้น วิธีการแก้ไขข้อมูล ได้แก่:
      • การแทนค่าผิดพลาดด้วยค่าอื่นที่เหมาะสม
      • การลบข้อมูลที่มีข้อผิดพลาดออกไป
  3. การแปลงข้อมูล (Data Transformation)
    หลังจากที่ข้อมูลสะอาดแล้ว ขั้นตอนถัดไปคือการแปลงข้อมูลให้เหมาะสมกับโมเดล Machine Learning ที่จะใช้งาน ซึ่งรวมถึง:
    1. การแปลงข้อมูลเป็นตัวเลข (Encoding)
      ข้อมูลที่เป็นประเภทข้อความ (Categorical Data) เช่น เพศ, สี, หรือประเภทของสินค้าจะไม่สามารถใช้ได้กับโมเดล Machine Learning โดยตรง วิธีการแปลงข้อมูลประเภทนี้คือ
      • One-Hot Encoding: การสร้างคอลัมน์ใหม่สำหรับแต่ละประเภทของข้อมูล และแทนค่าด้วย 0 หรือ 1
        ตัวอย่างเช่น

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

        # ตัวอย่างข้อมูล
        data = {'color': ['red', 'blue', 'green', 'blue']}
        df = pd.DataFrame(data)
        
        # One-Hot Encoding
        df_encoded = pd.get_dummies(df, columns=['color'])
        
        ผลลัพธ์แสดงดังภาพ
        One-Hot.png
        One-Hot.png (13.8 KiB) Viewed 271 times
      • Label Encoding: การแปลงข้อมูลประเภทข้อความให้เป็นตัวเลข
        ตัวอย่างเช่น

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

        from sklearn.preprocessing import LabelEncoder
        
        # ตัวอย่างข้อมูล
        data = {'color': ['red', 'blue', 'green', 'blue']}
        df = pd.DataFrame(data)
        
        # Label Encoding
        label_encoder = LabelEncoder()
        df['color_encoded'] = label_encoder.fit_transform(df['color'])
        
        ผลลัพธ์แสดงดังภาพ
        Label Encoding.png
        Label Encoding.png (15.04 KiB) Viewed 271 times
    2. การปรับขนาดข้อมูล (Normalization/Standardization)
      ข้อมูลที่มีขนาดแตกต่างกัน เช่น ค่าของน้ำหนักและส่วนสูง อาจทำให้โมเดลไม่สามารถเรียนรู้ได้ดี การปรับขนาดข้อมูลจะช่วยให้ข้อมูลทั้งหมดมีขนาดที่ใกล้เคียงกัน วิธีการปรับขนาดข้อมูลได้แก่
      • Normalization: การแปลงข้อมูลให้อยู่ในช่วง [0, 1]
        ตัวอย่างเช่น

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

        from sklearn.preprocessing import MinMaxScaler
        
        # ตัวอย่างข้อมูล
        data = {'age': [25, 30, 35, 40, 45], 'salary': [50000, 60000, 70000, 80000, 90000]}
        df = pd.DataFrame(data)
        
        # Normalization (Scaler จะเปลี่ยนค่าทั้งหมดให้เป็นช่วง [0, 1])
        scaler = MinMaxScaler()
        df_scaled = scaler.fit_transform(df)
        
        # แปลงผลลัพธ์กลับเป็น DataFrame
        df_scaled = pd.DataFrame(df_scaled, columns=df.columns)
        
        ผลลัพธ์แสดงดังภาพ
        MinMaxScaler.png
        MinMaxScaler.png (24.1 KiB) Viewed 271 times
      • Standardization: การปรับข้อมูลให้มีค่าเฉลี่ยเป็น 0 และส่วนเบี่ยงเบนมาตรฐานเป็น 1
        ตัวอย่างเช่น

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

        from sklearn.preprocessing import StandardScaler
        
        # ตัวอย่างข้อมูล
        data = {'age': [25, 30, 35, 40, 45], 'salary': [50000, 60000, 70000, 80000, 90000]}
        df = pd.DataFrame(data)
        
        # Standardization (Scaler จะทำให้ข้อมูลมีค่าเฉลี่ยเป็น 0 และส่วนเบี่ยงเบนมาตรฐานเป็น 1)
        scaler = StandardScaler()
        df_standardized = scaler.fit_transform(df)
        
        # แปลงผลลัพธ์กลับเป็น DataFrame
        df_standardized = pd.DataFrame(df_standardized, columns=df.columns)
        
        ผลลัพธ์แสดงดังภาพ
        StandardScaler.png
        StandardScaler.png (23.94 KiB) Viewed 271 times
  4. การแบ่งข้อมูล (Data Splitting)
    การแบ่งข้อมูลเป็นชุดฝึกสอน (Training Set) และชุดทดสอบ (Test Set) เป็นขั้นตอนที่สำคัญในการฝึกและทดสอบโมเดล โดยทั่วไปแล้วจะใช้การแบ่งข้อมูลเป็น 70%-80% สำหรับชุดฝึกสอนและ 20%-30% สำหรับชุดทดสอบ หรืออาจใช้เทคนิคอื่นๆ เช่น Cross-validation เพื่อเพิ่มความแม่นยำในการประเมินผลของโมเดล
    ตัวอย่างเช่น

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

    from sklearn.model_selection import train_test_split
    
    # ตัวอย่างข้อมูล
    data = {'age': [25, 30, 35, 40, 45], 'salary': [50000, 60000, 70000, 80000, 90000]}
    df = pd.DataFrame(data)
    
    # แบ่งข้อมูลเป็นชุดฝึกสอน (train) และชุดทดสอบ (test)
    X = df[['age']]  # ตัวแปรที่ใช้ทำนาย
    y = df['salary']  # ตัวแปรที่ต้องการทำนาย
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    print("X_train:\n", X_train)
    print("X_test:\n", X_test)
    
  5. การตรวจสอบความสมบูรณ์ของข้อมูล (Data Quality Check)
    หลังจากทำการเตรียมข้อมูลทั้งหมดแล้ว ควรตรวจสอบข้อมูลว่ามีความสมบูรณ์และถูกต้อง เพื่อให้มั่นใจว่าข้อมูลที่นำมาฝึกโมเดลนั้นมีคุณภาพสูงและสามารถนำไปใช้งานได้จริง
สรุป
การเตรียมข้อมูลสำหรับโมเดล Machine Learning เป็นขั้นตอนสำคัญในการสร้างโมเดลที่มีประสิทธิภาพ โดยประกอบด้วยเทคนิคดังนี้ การจัดการค่าที่ขาดหาย, การจัดการค่าผิดปกติ, การแปลงข้อมูลประเภทข้อความ (เช่น One-Hot Encoding หรือ Label Encoding), การปรับขนาดข้อมูล (Normalization/Standardization) และการแบ่งข้อมูล (การแยกข้อมูลเป็นชุดฝึกสอนและชุดทดสอบ) การเตรียมข้อมูลที่ดีจะช่วยให้โมเดลทำงานได้แม่นยำและมีประสิทธิภาพสูงขึ้นในการนำไปใช้ในงานต่างๆ เช่น การทำนาย, การจำแนกประเภท, และการวิเคราะห์ข้อมูลเชิงลึก

อ้างอิง
https://medium.com/mmp-li/จัดการกับข้อมูลไปจนถึงสร้างโมเดล-ml-มีขั้นตอนอะไรบ้าง-445da6d776a2
https://algoaddict.wordpress.com/2020/03/07/machine-learning-life-cycle-7-ขั้นตอนง่ายๆ-ในการส/
https://www.mindphp.com/บทเรียนออนไลน์/ ... taset.html
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

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

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