- การรวบรวมข้อมูล (Data Collection)
การรวบรวมข้อมูลเป็นขั้นตอนแรกที่สำคัญในการเตรียมข้อมูล หากไม่มีข้อมูลที่เหมาะสมก็จะไม่สามารถฝึกโมเดลได้ ข้อมูลสามารถมาจากหลายแหล่ง เช่น- ฐานข้อมูล (Databases)
- ไฟล์ CSV หรือ Excel
- API ที่ให้ข้อมูลจากแหล่งต่าง ๆ
- การสแครปข้อมูลจากเว็บไซต์ (Web Scraping)
- การตรวจสอบและจัดการข้อมูล (Data Cleaning)
เมื่อได้ข้อมูลแล้ว ขั้นตอนต่อไปคือการ Clean ข้อมูล เนื่องจากข้อมูลจริงอาจมีข้อผิดพลาดหรือไม่สมบูรณ์ ซึ่งอาจส่งผลเสียต่อประสิทธิภาพของโมเดล
- การจัดการกับค่าที่ขาดหาย (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']])
- การใช้เทคนิคอื่นๆ: เช่น การใช้ค่าเฉลี่ยถ่วงน้ำหนัก (weighted mean) หรือการใช้โมเดลที่คาดการณ์ค่าที่ขาดหาย
- การจัดการกับค่าผิดพลาด (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 หรือใช้การแปลงค่าข้อมูลให้เหมาะสม
- การใช้เทคนิคการตรวจสอบค่าผิดปกติ เช่น การใช้ IQR (Interquartile Range) หรือ Z-score
- การแก้ไขค่าผิดปกติ (Fixing Incorrect Values)
บางครั้งข้อมูลที่รวบรวมอาจมีข้อผิดพลาดจากการป้อนข้อมูลหรือการเก็บข้อมูลที่ผิดพลาด เช่น ข้อมูลที่มีตัวอักษรแทนตัวเลข การแก้ไขข้อผิดพลาดเหล่านี้จะช่วยให้ข้อมูลมีความถูกต้องมากขึ้น วิธีการแก้ไขข้อมูล ได้แก่:- การแทนค่าผิดพลาดด้วยค่าอื่นที่เหมาะสม
- การลบข้อมูลที่มีข้อผิดพลาดออกไป
- การจัดการกับค่าที่ขาดหาย (Handling Missing Values)
- การแปลงข้อมูล (Data Transformation)
หลังจากที่ข้อมูลสะอาดแล้ว ขั้นตอนถัดไปคือการแปลงข้อมูลให้เหมาะสมกับโมเดล Machine Learning ที่จะใช้งาน ซึ่งรวมถึง:- การแปลงข้อมูลเป็นตัวเลข (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'])
- 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'])
- One-Hot Encoding: การสร้างคอลัมน์ใหม่สำหรับแต่ละประเภทของข้อมูล และแทนค่าด้วย 0 หรือ 1
- การปรับขนาดข้อมูล (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)
- 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)
- Normalization: การแปลงข้อมูลให้อยู่ในช่วง [0, 1]
- การแปลงข้อมูลเป็นตัวเลข (Encoding)
- การแบ่งข้อมูล (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)
- การตรวจสอบความสมบูรณ์ของข้อมูล (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