ชุดข้อมูล (Data Set) ใน Machine Learning ด้วย Python

Data Set ใน Machine Learning คือชุดข้อมูลที่ใช้สำหรับการฝึก (training) และทดสอบ (testing) โมเดล Machine Learning โดยปกติแล้วจะเป็นไฟล์ข้อมูลที่มีข้อมูลจำนวนมาก ซึ่งประกอบไปด้วย feature (คุณสมบัติ) และ label (ป้ายกำกับ) โดย feature คือตัวแปรที่ใช้ในการอธิบายข้อมูล ส่วน label คือผลลัพธ์ที่เราต้องการจะทำนายหรือที่เราจะให้โมเดล Machine Learning เรียนรู้ ซึ่งมักจะเป็นคำตอบที่เรามีความแน่นอนแล้ว

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

การเลือก data set ที่เหมาะสมมีความสำคัญอย่างมากในการสร้างโมเดล Machine Learning ที่มีประสิทธิภาพ หาก data set ที่ใช้ไม่เหมาะสมหรือไม่เพียงพอ อาจทำให้โมเดลที่สร้างขึ้นมีประสิทธิภาพต่ำ หรือไม่สามารถนำไปใช้งานได้ในสภาพความเป็นจริง

Data Set ใน Machine Learning ได้แก่

  • Data Set มักถูกแบ่งออกเป็น 2 ส่วน คือ Training Set และ Test Set
  • Training Set ใช้สำหรับฝึกโมเดล Machine Learning โดยโมเดลจะเรียนรู้คุณลักษณะ (feature) และเรียนรู้การเชื่อมโยงระหว่าง feature กับผลลัพธ์ (label) จาก Training Set
  • Test Set ใช้สำหรับทดสอบโมเดลว่าสามารถทำนายผลได้ถูกต้องหรือไม่ โดยโมเดลจะถูกทดสอบด้วย Test Set ที่ไม่เคยเห็นข้อมูลใน Training Set ก่อนหน้า
  • การแบ่ง Data Set เป็น Training Set และ Test Set จะช่วยป้องกันปัญหา Overfitting ซึ่งเกิดจากโมเดลมีประสิทธิภาพสูงกับ Training Set แต่มีประสิทธิภาพต่ำกับ Test Set เนื่องจากโมเดลได้เรียนรู้แต่ละตัวอย่างใน Training Set จนเกินไป
  • Data Set ที่ไม่ถูกแบ่งออกเป็น Training Set และ Test Set อาจทำให้ผลการทดสอบที่ได้ไม่สามารถสะท้อนความสามารถของโมเดลในสถานการณ์จริงได้อย่างแม่นยำ และอาจเป็นการล่องลอย (data snooping) หรือการหาสมการที่สอดคล้องกับข้อมูลที่ใช้ในการฝึกโมเดลเท่านั้นโดยไม่สามารถนำไปใช้กับข้อมูลใหม่ได้

Data set ใน Machine Learning มักถูกใช้ในการสร้างและฝึกโมเดล ซึ่งมีหลายแบบตามลักษณะของข้อมูลที่ต้องการสร้างโมเดล เช่น ข้อมูลที่เป็นตัวเลข (numerical data), ข้อความ (text data), ภาพ (image data) หรือวิดีโอ (video data) ฯลฯ

Data set จะประกอบด้วยข้อมูลตัวอย่าง (instances) ที่มีคุณลักษณะ (features) ซึ่งจะถูกใช้ในการฝึกโมเดล โดยมักจะแบ่งเป็นสองส่วนคือ training set และ test set โดยใช้ training set เพื่อฝึกโมเดล และ test set เพื่อวัดประสิทธิภาพของโมเดล

นอกจากนี้ยังมีเทคนิคการสร้าง data set หลายแบบเช่น

  • Data augmentation: เพิ่มข้อมูลตัวอย่างเข้าไปใน data set เพื่อเพิ่มประสิทธิภาพในการฝึกโมเดล
  • Data cleaning: การลบข้อมูลที่ไม่ถูกต้อง หรือข้อมูลที่ซ้ำซ้อนออกจาก data set
  • Data sampling: การสุ่มข้อมูลตัวอย่างจาก data set ให้เป็นไปตามเงื่อนไขที่ต้องการ ฯลฯ

การสร้าง data set ที่เหมาะสมและครอบคลุมจะช่วยให้การฝึกโมเดลด้วย Machine Learning สามารถให้ผลลัพธ์ที่ดีและแม่นยำได้

ใน Machine Learning ด้วย Python การใช้ data set เป็นสิ่งสำคัญที่ช่วยให้โมเดล Machine Learning สามารถเรียนรู้ได้จากข้อมูล โดยใน Python มี library ต่างๆ ที่ช่วยในการดึงข้อมูล, จัดการข้อมูล, และวิเคราะห์ข้อมูลต่างๆ เช่น Pandas, Numpy, Scikit-learn, TensorFlow และอื่นๆ

เมื่อได้ data set มาแล้ว จะต้องนำข้อมูลมาจัดการเพื่อให้เหมาะสมกับการสร้างโมเดล Machine Learning โดยมักจะมีขั้นตอนหลักๆ ดังนี้

  1. การเตรียมข้อมูล (Data Preparation) – ขั้นตอนนี้เป็นการเตรียมข้อมูลก่อนนำไปใช้ในการสร้างโมเดล Machine Learning ซึ่งรวมถึงการตรวจสอบความถูกต้องของข้อมูล, การจัดรูปแบบข้อมูล, การแก้ไขข้อมูลที่หายไปหรือไม่สมบูรณ์, การทำความสะอาดข้อมูล (Data Cleaning), การแปลงข้อมูลให้อยู่ในรูปแบบที่เหมาะสม, การเลือก feature ที่เหมาะสมเพื่อใช้ในการสร้างโมเดล Machine Learning และอื่นๆ

  2. การแบ่งชุดข้อมูล (Data Splitting) – ขั้นตอนนี้เป็นการแบ่งชุดข้อมูลออกเป็น training set และ testing set เพื่อใช้ในการสร้างโมเดล Machine Learning และประเมินประสิทธิภาพของโมเดล

  3. การสร้างและประเมินโมเดล (Model Creation and Evaluation) – ขั้นตอนนี้เป็นการสร้างโมเดล Machine Learning และประเมินประสิทธิภาพของโมเดลด้วย testing set โดยการใช้ metric ต่างๆ เช่น accuracy, precision, recall, F1 score, AUC, RMSE และอื่นๆ

ตัวอย่างเช่น Data Set เกี่ยวกับสัตว์ อาจจะประกอบด้วยภาพของสัตว์และข้อมูลเกี่ยวกับสัตว์นั้นๆ เช่น ชื่อสัตว์ ประเภทของสัตว์ (เช่น นก, หมู, แมว), รายละเอียดเกี่ยวกับสัตว์ (เช่น นกบินได้, หมูสุกร, แมวเป็นสัตว์เลี้ยงลูกด้วยนม), และอื่นๆ

ซึ่งตัวอย่าง Data Set เกี่ยวกับสัตว์ที่มักนำมาใช้ในการฝึกสอนแบบ supervised learning คือ CIFAR-10 ซึ่งเป็น Data Set ของรูปภาพ โดยประกอบด้วยรูปภาพขนาด 32×32 พร้อมกับป้ายชื่อประเภทของสัตว์ทั้งหมด 10 ประเภท (เช่น นก, แมว, หมู, รถยนต์) โดยมีจำนวนรูปภาพทั้งหมด 60,000 รูป ซึ่งถูกแบ่งเป็น 50,000 รูปสำหรับฝึกสอน (training set) และ 10,000 รูปสำหรับทดสอบ (test set)

Data Set นี้สามารถนำมาใช้ในการฝึกสอนและทดสอบโมเดลเพื่อแยกแยะประเภทของสัตว์ ด้วยการใช้เทคนิคของ supervised learning ที่ได้กล่าวมาก่อนหน้านี้ในการสร้างโมเดลและทำนายประเภทของสัตว์จากภาพ

ตัวอย่างเช่น Data Set เกี่ยวกับสัตว์ อาจจะประกอบด้วยภาพของสัตว์และข้อมูลเกี่ยวกับสัตว์นั้นๆ เช่น ชื่อสัตว์ ประเภทของสัตว์ (เช่น นก, หมู, แมว), รายละเอียดเกี่ยวกับสัตว์ (เช่น นกบินได้, หมูสุกร, แมวเป็นสัตว์เลี้ยงลูกด้วยนม), และอื่นๆ

ซึ่งตัวอย่าง Data Set เกี่ยวกับสัตว์ที่มักนำมาใช้ในการฝึกสอนแบบ supervised learning คือ CIFAR-10 ซึ่งเป็น Data Set ของรูปภาพ โดยประกอบด้วยรูปภาพขนาด 32×32 พร้อมกับป้ายชื่อประเภทของสัตว์ทั้งหมด 10 ประเภท (เช่น นก, แมว, หมู, รถยนต์) โดยมีจำนวนรูปภาพทั้งหมด 60,000 รูป ซึ่งถูกแบ่งเป็น 50,000 รูปสำหรับฝึกสอน (training set) และ 10,000 รูปสำหรับทดสอบ (test set)

Data Set นี้สามารถนำมาใช้ในการฝึกสอนและทดสอบโมเดลเพื่อแยกแยะประเภทของสัตว์ ด้วยการใช้เทคนิคของ supervised learning ที่ได้กล่าวมาก่อนหน้านี้ในการสร้างโมเดลและทำนายประเภทของสัตว์จากภาพ

ข้อมูลตัวอย่างเกี่ยวกับสัตว์ (Animal Dataset) สามารถแสดงได้เป็นตารางข้อมูลดังนี้

ชื่อ ชนิด น้ำหนัก (กิโลกรัม) ส่วนสูง (เซนติเมตร) เสียง สัตว์เลี้ยงลูกด้วยน้ำนม
ช้าง สัตว์บก 3000-5000 240-400 เสียงโหยหวน ใช่
สิงโต สัตว์บก 120-250 90-190 เสียงคราง ไม่ใช่
โลมา สัตว์น้ำ 600-2000 3-6 เสียงคราง ใช่
นกอินทรี สัตว์ปีก 0.02-1.4 8-40 เสียงปี๊บ ใช่
กิ้งก่า สัตว์บก 0.01-0.8 4-15 เสียงร้อง ไม่ใช่
ปลาหมึก สัตว์น้ำ 0.1-15 1-60 เสียงไม่มี ใช่

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

ตัวอย่าง การสร้าง Data Set ใน Machine Learning ด้วย Python ในการสร้าง Data Set สำหรับการแยกประเภทดอกไม้ (iris) ด้วยคำสั่งต่อไปนี้

from sklearn.datasets import load_iris

# โหลด iris dataset
iris = load_iris()

# แสดงข้อมูลของ iris dataset
print(iris.data)
print(iris.target)

ผลลัพธ์ที่ได้จะเป็นข้อมูลของดอกไม้ iris ทั้งหมด 150 ตัว แบ่งออกเป็น 4 คุณสมบัติของดอกไม้ (กลีบเลี้ยง, กลีบดอก, กว้างขนาด, ยาวขนาด) และ 3 กลุ่มของดอกไม้ (Setosa, Versicolour, Virginica) ที่ต้องการแยกประเภท

การใช้งาน Data Set นี้เพื่อพัฒนาโมเดล Machine Learning สามารถทำได้หลายวิธี ในตัวอย่างนี้จะใช้ Decision Tree สร้างโมเดลการแยกประเภทของดอกไม้ iris ดังนี้

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# แบ่งข้อมูลเป็น train set และ test set
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# สร้างโมเดล Decision Tree Classifier
clf = DecisionTreeClassifier()

# ฝึกโมเดลด้วย train set
clf.fit(X_train, y_train)

# ทำนาย test set
y_pred = clf.predict(X_test)

# คำนวณความแม่นยำของโมเดล
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

โค้ดนี้จะสร้างโมเดล Decision Tree Classifier จาก Data Set ของดอกไม้ iris และคำนวณความแม่นยำของโมเดลโดยใช้ test set ที่แยกออกมาก่อนหน้านี้

ตัวอย่าง การสร้าง Data Set สำหรับการแยกประเภทสัตว์ โดยจะมีการใช้โมดูล Pillow เพื่อโหลดภาพและประมวลผลภาพ และโมดูล os เพื่อทำงานกับไฟล์และไดเรกทอรีในระบบไฟล์

1. กำหนดชื่อไดเรกทอรีเก็บรูปภาพแต่ละชนิดของสัตว์ และกำหนดจำนวนภาพที่ต้องการให้เป็น Data Set

# กำหนดชื่อไดเรกทอรีของแต่ละชนิดของสัตว์
categories = ['cat', 'dog']
# กำหนดจำนวนภาพที่ต้องการให้เป็น Data Set
num_images = 1000

2. โหลดและประมวลผลรูปภาพของแต่ละชนิดของสัตว์ เพื่อสร้าง Data Set

# สร้าง Data Set จากรูปภาพแต่ละชนิดของสัตว์
data = []
for category in categories:
    folder_path = os.path.join(DATA_DIR, category)
    for img_file in os.listdir(folder_path):
        # โหลดและประมวลผลรูปภาพเพื่อเตรียมใช้งานในการสร้าง Data Set
        img_path = os.path.join(folder_path, img_file)
        img = Image.open(img_path)
        img = img.convert('RGB')
        img = img.resize((IMG_SIZE, IMG_SIZE), Image.ANTIALIAS)
        # แปลงรูปภาพเป็น numpy array
        img_data = np.array(img)
        # จัดเก็บข้อมูลรูปภาพและประเภทของสัตว์ใน list
        data.append((img_data, category))

3. สุ่มเรียงลำดับและแบ่ง Data Set เป็นชุด train และ test

# สุ่มเรียงลำดับข้อมูลและแบ่งข้อมูลเป็นชุด train และ test
random.shuffle(data)
split_index = int(len(data) * TRAIN_SPLIT)
train_data = data[:split_index]
test_data = data[split_index:]