การเตรียมข้อมูล (Data Preparation) สำหรับ Deep Learning
การเตรียมข้อมูล (Data Preparation) เป็นขั้นตอนสำคัญในการสร้างและประเมินโมเดล Deep Learning โดยมีเป้าหมายเพื่อเตรียมข้อมูลให้เหมาะสมกับการฝึกฝน (training) และทดสอบ (testing) โมเดล ซึ่งสามารถทำได้โดยจัดการข้อมูลให้อยู่ในรูปแบบที่ถูกต้อง และตรวจสอบความถูกต้องของข้อมูลเพื่อป้องกันการเรียนรู้ที่ผิดพลาด (overfitting) หรือการเรียนรู้ที่ไม่เหมาะสม (underfitting) เพื่อแก้ไขปัญหาต่างๆ ซึ่งมีวัตถุประสงค์เพื่อเตรียมข้อมูลให้เหมาะสมและสามารถนำไปใช้ในการสร้างและทดสอบโมเดลได้อย่างมีประสิทธิภาพ การเตรียมข้อมูลประกอบด้วยขั้นตอนต่างๆ ดังนี้
-
การเก็บรวบรวมข้อมูล (Data Collection) การเก็บรวบรวมข้อมูลจะต้องใช้วิธีการเหมาะสมเพื่อเข้าถึงข้อมูลในปริมาณที่มากพอที่จะสามารถสร้างโมเดลได้ เช่น การเก็บรูปภาพด้วยกล้องถ่ายภาพ การดึงข้อมูลจากฐานข้อมูล หรือการดึงข้อมูลจากเว็บไซต์ต่างๆ เป็นต้น การจัดรูปแบบและเตรียมข้อมูลให้เหมาะสมสำหรับการนำเข้าโมเดล Deep Learning เช่น การกำหนดรูปแบบของข้อมูลเข้ากับโมเดล เช่น การแปลงข้อมูลอักษรเป็นตัวเลขและการเปลี่ยนรูปแบบของข้อมูลเป็นรูปแบบที่สามารถใช้กับโมเดลได้
-
การตรวจสอบและทำความสะอาดข้อมูล (Data Inspection and Cleaning) การตรวจสอบและทำความสะอาดข้อมูลเป็นขั้นตอนสำคัญเพื่อลดปัญหาการเกิดข้อผิดพลาดในการเรียนรู้ของโมเดล โดยประกอบด้วยการตรวจสอบความสมบูรณ์และความถูกต้องของข้อมูล การลบข้อมูลที่ไม่เหมาะสม การแก้ไขข้อมูลที่ไม่ถูกต้อง เช่น ข้อมูลที่หายไป ข้อมูลที่ไม่สมบูรณ์ หรือข้อมูลที่ซ้ำกัน เป็นต้น การตรวจสอบและจัดการกับข้อมูลที่เสียหาย หรือข้อมูลที่ไม่ถูกต้อง เช่น ข้อมูลที่ขาดหายไป (missing data) หรือข้อมูลที่ไม่ถูกต้อง (incorrect data) เพื่อให้ข้อมูลมีคุณภาพที่ดีกว่า และสามารถนำมาใช้กับโมเดล Deep Learning ได้
-
การแบ่งข้อมูล (Data Splitting) ในขั้นตอนนี้จะเป็นการแบ่งข้อมูลออกเป็นชุดข้อมูลสำหรับฝึกฝน (training set) และชุดข้อมูลสำหรับทดสอบ (testing set) เพื่อใช้ในการฝึกฝนและประเมินโมเดล โดยปกติแล้วจะแบ่งเป็นสัดส่วนที่เหมาะสม เช่น 80% สำหรับฝึกฝนและ 20% สำหรับทดสอบ การแบ่งข้อมูลเป็นชุด Train, Validation และ Test เป็นการแบ่งข้อมูลเพื่อให้สามารถวัดประสิทธิภาพของโมเดลได้ โดยมักจะแบ่งข้อมูลเป็นอย่างน้อย 2 ชุด คือ Train และ Test แต่บางครั้งอาจมีการแบ่งเป็น Train, Validation และ Test เพื่อใช้สำหรับการปรับแต่ง Hyperparameters และทำแบบทดสอบ (Testing) การแบ่งชุดข้อมูลเป็นชุดฝึกฝนและชุดทดสอบเพื่อวัดประสิทธิภาพของโมเดล โดยทั่วไปจะแบ่งชุดข้อมูลออกเป็นสัดส่วนสำหรับฝึกฝนและทดสอบ ซึ่งจะช่วยให้มั่นใจได้ว่าโมเดลของเราสามารถทำงานกับข้อมูลที่ไม่เคยเห็นมาก่อนได้
-
การแปลงข้อมูล (Data Transformation) การแปลงข้อมูลเป็นขั้นตอนที่สำคัญเพื่อเตรียมข้อมูลให้เหมาะสมกับโมเดลที่ใช้ โดยส่วนใหญ่จะมีการแปลงข้อมูลเป็นรูปภาพ (Image) หรือตัวเลข (Numerical) เช่น การปรับขนาดภาพ (Image Resizing) การทำ Augmentation เพื่อเพิ่มจำนวนข้อมูล หรือการทำ Normalization เพื่อปรับค่าความสัมพันธ์ระหว่างข้อมูล เป็นต้น ซึ่งการ Scaling ข้อมูล (Normalization) เป็นกระบวนการที่สำคัญในการเตรียมข้อมูลสำหรับ Deep Learning โดยทั่วไปแล้วจะนำมาใช้เมื่อข้อมูลต้นฉบับมีความแตกต่างกันในช่วงของช่องค่าต่างๆ ซึ่งอาจจะทำให้โมเดล Deep Learning ไม่สามารถเรียนรู้และทำนายผลได้ดีตามความเป็นจริง หลักการของ Scaling หรือ Normalization คือการปรับแต่างข้อมูลให้มี mean และ standard deviation เท่ากับ 0 และ 1 ตามลำดับ เพื่อให้ค่าของข้อมูลมีความเข้ากันได้และสามารถนำมาประมวลผลได้ดีขึ้น การปรับข้อมูลให้เป็นช่วงหรือมาตรฐานที่เหมาะสม เช่น การแปลงข้อมูลให้อยู่ในช่วง [0,1] หรือ [-1,1] เพื่อให้โมเดลสามารถเรียนรู้และดำเนินการได้อย่างมีประสิทธิภาพ
การเก็บรวบรวมข้อมูล (Data Collection)
สามารถเขียนโปรแกรมขึ้นมาให้เก็บรวมอัติโนมัติได้ด้วย Python เป็นการสร้างโปรแกรมที่ใช้ Python เพื่อรวบรวมข้อมูลอัตโนมัติจากแหล่งข้อมูลต่างๆ เพื่อนำไปใช้ในการฝึกสอนโมเดล ขั้นตอนเบื้องต้นสำหรับการเก็บรวบรวมข้อมูลด้วย Python ได้ดังนี้ คือ
-
กำหนดแหล่งข้อมูล: กำหนดว่าจะเก็บข้อมูลมาจากแหล่งใด เช่นเว็บไซต์, โซเชียลมีเดีย, หรือแหล่งข้อมูลอื่นๆ
-
ใช้ Python Libraries: ใช้ไลบรารี Python เช่น requests, BeautifulSoup, pandas เพื่อสร้างโปรแกรมสำหรับดึงข้อมูลอัตโนมัติจากแหล่งข้อมูลที่กำหนด
-
ตั้งค่าการเชื่อมต่อ: ตั้งค่าการเชื่อมต่อเพื่อเข้าถึงแหล่งข้อมูล เช่นการตั้งค่า API Key, การเชื่อมต่อฐานข้อมูล, หรือการตั้งค่าการใช้งานเว็บไซต์
-
ดึงข้อมูล: ใช้ Python Libraries เพื่อดึงข้อมูลจากแหล่งข้อมูล โดยส่วนใหญ่จะใช้ requests ในการร้องขอข้อมูล และ BeautifulSoup เพื่อดึงข้อมูลจาก HTML
-
จัดเก็บข้อมูล: จัดเก็บข้อมูลที่ดึงมาเป็นไฟล์ CSV, JSON, หรือไฟล์อื่นๆ เพื่อนำไปใช้ในการฝึกสอนโมเดล Deep Learning
การเก็บรวบรวมข้อมูลสามารถดึงจากเว็บไซต์ต่างๆ ได้ ด้วยการใช้ Python ไลบรารี่ BeautifulSoup ตัวอย่างเช่น
import requests
from bs4 import BeautifulSoup
# ระบุ URL ของหน้าเว็บไซต์ที่ต้องการดึงข้อมูล
url = "https://www.example.com"
# ใช้ requests library เพื่อเรียกดูหน้าเว็บไซต์
response = requests.get(url)
# ใช้ BeautifulSoup library เพื่อแปลงข้อมูลในหน้าเว็บไซต์เป็นโครงสร้างต้นแบบ (HTML DOM)
soup = BeautifulSoup(response.content, "html.parser")
# ค้นหาแท็ก <p> ใน HTML DOM และพิมพ์เนื้อหาของแต่ละแท็กออกมา
for paragraph in soup.find_all('p'):
print(paragraph.text)
จากตัวอย่าง จะเรียกดูข้อมูลจากเว็บไซต์ https://www.example.com และแสดงผลลัพธ์ที่มีแท็ก <p> ออกมาทั้งหมดด้วยคำสั่ง print(paragraph.text)
ตัวอย่าง การเก็บรวบรวมข้อมูลจากเว็บไซต์ด้วย BeautifulSoup โดยใช้งานการวนซ้ำเพื่อเก็บข้อมูลจากหลายหน้าเว็บไซต์ ตัวอย่างนี้จะดึงข้อมูลจากหน้าเว็บไซต์ Amazon ในหมวดหมู่หนังสือ และจะเก็บข้อมูลเกี่ยวกับชื่อหนังสือ ราคา และคะแนนเฉลี่ยของผู้ใช้สำหรับแต่ละหนังสือ
import requests
from bs4 import BeautifulSoup
# กำหนด URL และข้อมูลสำหรับเปิดเชื่อมต่อ
url = "https://www.amazon.com/s?i=stripbooks&bbn=283155&rh=n%3A283155%2Cp_36%3A0-20&dc&qid=1634801376&rnid=386491011&ref=sr_nr_p_36_0"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
# สร้างการเรียกขอข้อมูล
response = requests.get(url, headers=headers)
# ประมวลผล HTML ด้วย BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# ค้นหากลุ่มสินค้าในหน้าเว็บไซต์
results = soup.find_all('div', {'data-component-type': 's-search-result'})
# ลูปผ่านกลุ่มสินค้าและแยกข้อมูล
for result in results:
try:
# ค้นหาชื่อหนังสือ
title = result.find('h2', {'class': 'a-size-mini a-spacing-none a-color-base s-line-clamp-2'}).text.strip()
# ค้นหาราคา
price = result.find('span', {'class': 'a-offscreen'}).text.strip()
# ค้นหาคะแนนเฉลี่ยของผู้ใช้
rating = result.find('span', {'class': 'a-icon-alt'}).text.strip().split()[0]
print(title, price, rating)
except:
# ไม่พบข้อมูลในกลุ่มสินค้านี้ ข้ามไปยังกลุ่มสินค้าถัดไป
continue
เห็นว่าการใช้งาน BeautifulSoup เป็นเครื่องมือที่มีประโยชน์ในการเก็บรวบรวมข้อมูลจากเว็บไซต์อย่างอัตโนมัติ
ในตัวอย่างนี้ เราใช้ requests library เพื่อเปิดเชื่อมต่อไปยัง URL และ BeautifulSoup library เพื่อทำการประมวลผล HTML ที่ได้รับจากเว็บไซต์ โดยใช้ method find_all() ในการค้นหากลุ่มของสินค้า และ method find() เพื่อค้นหาข้อมูลเฉพาะของแต่ละสินค้าภายในกลุ่มนั้นๆ
การใช้ try-except block ในลูป for เป็นเรื่องสำคัญเพื่อป้องกันการหยุดทำงานของโปรแกรมเมื่อพบข้อผิดพลาดในการค้นหาข้อมูลในกลุ่มสินค้านั้นๆ และการใช้ continue statement ใน except block เพื่อข้ามไปยังกลุ่มสินค้าถัดไปในกรณีที่ไม่พบข้อมูลสำหรับกลุ่มสินค้านั้นๆ
ผลลัพธ์ที่ได้จากการรันโค้ดนี้จะแสดงชื่อหนังสือ ราคา และคะแนนเฉลี่ยของผู้ใช้สำหรับสินค้าต่างๆ ในหน้าเว็บไซต์ที่กำหนดในตัวแปร URL
การตรวจสอบและทำความสะอาดข้อมูล (Data Inspection and Cleaning)
เป็นขั้นตอนสำคัญในการเตรียมข้อมูลสำหรับ Deep Learning ซึ่งมุ่งเน้นไปที่การตรวจสอบความถูกต้องและความสมบูรณ์ของข้อมูล เพื่อให้ข้อมูลที่ได้นำมาใช้ในการสร้างโมเดล Deep Learning มีคุณภาพและสามารถนำไปใช้งานได้จริง
การตรวจสอบข้อมูลมักจะเริ่มต้นด้วยการดูข้อมูลเบื้องต้นเช่น จำนวนข้อมูลทั้งหมด จำนวนคอลัมน์ ชนิดของข้อมูล เป็นต้น จากนั้นต้องทำการตรวจสอบความสมบูรณ์ของข้อมูลว่ามีข้อมูลที่หายไปหรือไม่สมบูรณ์ และควรทำการจัดการข้อมูลเหล่านี้ให้เป็นไปตามที่ต้องการ
เมื่อตรวจสอบข้อมูลแล้วพบว่าข้อมูลมีความไม่สมบูรณ์หรือไม่เหมาะสมสำหรับ Deep Learning จะต้องทำการทำความสะอาดข้อมูล ซึ่งมีหลายวิธีที่สามารถนำมาใช้ได้ เช่น การลบข้อมูลที่หายไป การแทนที่ข้อมูลที่หายไปด้วยค่าเฉลี่ย การลบแถวหรือคอลัมน์ที่ไม่เหมาะสม การลบข้อมูลที่ซ้ำกัน เป็นต้น
การทำความสะอาดข้อมูลเป็นขั้นตอนสำคัญในการเตรียมข้อมูลสำหรับ Deep Learning ซึ่งจะช่วยให้ข้อมูลที่ได้นำมาใช้ในการสร้างโมเดลมีคุณภาพและสามารถนำไปใช้งานได้จริง และช่วยลดการผิดพลาดในการสร้างโมเดล
ตัวอย่าง การตรวจสอบและทำความสะอาดข้อมูลด้วย Python
import pandas as pd
# โหลดข้อมูลจากไฟล์ csv
df = pd.read_csv('data.csv')
# แสดงจำนวนแถวและคอลัมน์ของข้อมูล
print('Data shape:', df.shape)
# ตรวจสอบและแสดงข้อมูลหัวตาราง
print('Head of data:')
print(df.head())
# ตรวจสอบค่า null ในแต่ละคอลัมน์
print('Null values:')
print(df.isnull().sum())
# ลบแถวที่มีค่า null
df.dropna(inplace=True)
# ตรวจสอบและแสดงข้อมูลหัวตารางหลังจากทำการลบแถวที่มีค่า null
print('Head of data after dropping null values:')
print(df.head())
# แปลงคอลัมน์ category เป็น one-hot encoding
df = pd.get_dummies(df, columns=['category'])
# แสดงจำนวนแถวและคอลัมน์ของข้อมูลหลังจากทำการ one-hot encoding
print('Data shape after one-hot encoding:', df.shape)
# แสดงตัวอย่างข้อมูลหลังจากทำการ one-hot encoding
print('Head of data after one-hot encoding:')
print(df.head())
จากตัวอย่างนี้ ข้อมูลถูกโหลดจากไฟล์ CSV และแสดงข้อมูลหัวตารางเพื่อตรวจสอบว่าข้อมูลถูกโหลดอย่างถูกต้องหรือไม่ และตรวจสอบว่ามีค่า null ในแต่ละคอลัมน์หรือไม่ ถ้าพบค่า null ข้อมูลจะถูกลบ และคอลัมน์ category จะถูกแปลงเป็น one-hot encoding เพื่อเตรียมข้อมูลสำหรับการฝึกอบรม Deep Learning และข้อมูลหัวตารางจะถูกแสดงอีกครั้งหลังจากการดำเนินการ one-hot encoding
ตัวอย่าง Python สำหรับการตรวจสอบและทำความสะอาดข้อมูล
import pandas as pd
# โหลดไฟล์ข้อมูล
df = pd.read_csv('data.csv')
# แสดงข้อมูลตั้งต้น
print(df.head())
# ตรวจสอบชนิดข้อมูลของแต่ละคอลัมน์
print(df.dtypes)
# ตรวจสอบค่าหายไป
print(df.isnull().sum())
# ลบแถวที่มีค่าหายไป
df = df.dropna()
# ตรวจสอบขนาดของชุดข้อมูลหลังจากลบแถวที่มีค่าหายไป
print(df.shape)
# กำหนดชื่อคอลัมน์
df.columns = ['age', 'gender', 'income', 'credit_score', 'purchased']
# แปลงชนิดข้อมูลของคอลัมน์ 'age' จาก float เป็น int
df['age'] = df['age'].astype(int)
# แปลงข้อมูลในคอลัมน์ 'gender' จาก male/female เป็น 0/1
df['gender'] = df['gender'].apply(lambda x: 1 if x == 'female' else 0)
# แปลงข้อมูลในคอลัมน์ 'purchased' จาก yes/no เป็น 1/0
df['purchased'] = df['purchased'].apply(lambda x: 1 if x == 'yes' else 0)
# แสดงข้อมูลหลังจากทำความสะอาด
print(df.head())
จากตัวอย่างนี้ ใช้ Pandas เพื่อโหลดไฟล์ข้อมูล csv และทำการตรวจสอบและทำความสะอาดข้อมูล โดยใช้คำสั่ง dtypes
เพื่อตรวจสอบชนิดของข้อมูลในแต่ละคอลัมน์ isnull()
เพื่อตรวจสอบค่าหายไปและลบแถวที่มีค่าหายไปด้วย dropna()
นอกจากนี้เรายังกำหนดชื่อคอลัมน์และแปลงข้อมูลในคอลัมน์ต่างๆให้เหมาะสมด้วยฟังก์ชัน apply()
และ astype()
ตามลำดับ ก่อนที่จะแสดงข้อมูลหลัง
การแบ่งข้อมูล (Data Splitting)
เป็นกระบวนการแบ่งข้อมูลออกเป็นชุดสอน (Training Set) และชุดทดสอบ (Testing Set) เพื่อใช้สำหรับการสร้างและประเมินโมเดล Deep Learning ให้มีประสิทธิภาพสูงสุด การแบ่งข้อมูลสามารถทำได้โดยใช้ฟังก์ชัน train_test_split() ของโมดูล sklearn ของภาษา Python สำหรับการแบ่งข้อมูลด้วย train_test_split() ดังนี้
from sklearn.model_selection import train_test_split
# แบ่งข้อมูลออกเป็นชุดสอนและชุดทดสอบ โดยใช้ test_size 0.2 หมายถึงแบ่งข้อมูลสำหรับทดสอบออกเป็น 20% ของข้อมูลทั้งหมด
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
โดยที่ X คือ feature ของข้อมูล และ y คือ target หรือ output ของข้อมูล ตัวแปร test_size กำหนดส่วนส่วนของข้อมูลที่จะใช้สำหรับทดสอบ และ random_state ใช้สำหรับกำหนดค่า seed ในการสุ่มข้อมูล เพื่อให้การแบ่งข้อมูลเหมือนกันทุกครั้งที่ทำการแบ่งข้อมูล
หลังจากแบ่งข้อมูลเสร็จเรียบร้อยแล้ว จะได้ X_train, y_train สำหรับสร้างโมเดล และ X_test, y_test สำหรับทดสอบโมเดลที่สร้างขึ้น โดยใช้ชุดข้อมูล X_train, y_train ในการสร้างโมเดล และใช้ชุดข้อมูล X_test, y_test ในการทดสอบประสิทธิภาพของโมเดลที่สร้างขึ้น
ตัวอย่าง การแบ่งข้อมูล (Data Splitting) สำหรับ Deep Learning โดยใช้ scikit-learn
import numpy as np
from sklearn.model_selection import train_test_split
# สร้างข้อมูลสุ่มขนาด 1000 x 10
X = np.random.rand(1000, 10)
y = np.random.randint(2, size=1000)
# แบ่งข้อมูลเป็นชุด train และ test ด้วยสัดส่วน 70:30
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
จากตัวอย่าง ได้ใช้ numpy เพื่อสร้างข้อมูลสุ่มขนาด 1000 x 10 พร้อมกับตัวเลขเป้าหมายที่สุ่มด้วย numpy.random.randint() และแบ่งข้อมูลเป็นชุด train และ test ด้วยฟังก์ชั่น train_test_split() ของ scikit-learn โดยกำหนดสัดส่วนของชุดทดสอบเป็น 30% และกำหนด random state เพื่อให้ผลการแบ่งข้อมูลเหมือนกันทุกครั้งที่รันโค้ด
เมื่อเราแบ่งข้อมูลเป็นชุดฝึกฝน (training set) และชุดทดสอบ (test set) เราจะต้องระวังไม่ให้ข้อมูลซ้ำซ้อนกันระหว่างชุดฝึกฝนและชุดทดสอบ เพราะจะทำให้ผลการทดสอบไม่ถูกต้องและไม่สามารถใช้งานได้จริง
ในบางกรณี เราอาจต้องการแบ่งข้อมูลออกเป็นชุดฝึกฝน (training set) ชุดทดสอบ (test set) และชุดการตรวจสอบ (validation set) ซึ่งชุดการตรวจสอบนี้จะถูกใช้ในการปรับแต่งพารามิเตอร์ของโมเดล เช่น learning rate, dropout rate, หรือจำนวนเลเยอร์ที่ใช้ ซึ่งชุดการตรวจสอบนี้จะไม่ถูกใช้ในการปรับแต่งพารามิเตอร์ในการฝึกฝนแต่อย่างใด แต่จะถูกใช้เพื่อตรวจสอบว่าโมเดลของเรามีประสิทธิภาพอย่างไรกับชุดข้อมูลที่ไม่เคยเห็นมาก่อน
การแปลงข้อมูล (Data Transformation)
เป็นขั้นตอนสำคัญในการเตรียมข้อมูลสำหรับ Deep Learning โดยการแปลงข้อมูลจะช่วยให้โมเดล Deep Learning สามารถเข้าใจและเรียนรู้จากข้อมูลได้ดียิ่งขึ้น การแปลงข้อมูลสามารถทำได้หลายวิธี แต่การเลือกวิธีการแปลงข้อมูลที่เหมาะสมกับปัญหาและข้อมูลที่มีอยู่เป็นสิ่งสำคัญ โดยทั่วไปแล้วการแปลงข้อมูลสามารถแบ่งได้เป็นหลายประเภทดังนี้
-
Scaling / Normalization: เป็นการปรับสเกลข้อมูลให้อยู่ในช่วงที่เหมาะสม เช่นการแปลงค่าตัวเลขจาก 0 ถึง 255 ให้เป็นช่วง 0 ถึง 1
-
Encoding: เป็นการแปลงข้อมูลไม่ตัวเลขให้อยู่ในรูปแบบของตัวเลข เช่นการแปลงข้อมูลประเภทเป็น one-hot encoding
-
Feature engineering: เป็นการสร้าง feature ใหม่จากข้อมูลที่มีอยู่ โดยใช้วิธีการต่างๆ เช่นการสร้าง feature จากข้อมูลวันเวลา การสร้าง feature จากข้อมูลตำแหน่งพิกัด
-
Dimensionality reduction: เป็นการลดจำนวน feature ในข้อมูล เพื่อลดความซับซ้อนของข้อมูลและลดเวลาในการสร้างโมเดล เช่นการใช้ PCA (Principal Component Analysis) ในการลดจำนวน feature
-
Augmentation: เป็นการสร้างข้อมูลใหม่จากข้อมูลที่มีอยู่ โดยใช้วิธีการต่างๆ เช่นการสร้างข้อมูลใหม่จากการหมุนหรือการเพิ่มเติมข้อมูล
การแปลงข้อมูล (Data Transformation) เป็นขั้นตอนที่สำคัญในการเตรียมข้อมูลสำหรับการนำมาใช้ในการสร้างแบบจำลอง Deep Learning โดยการแปลงข้อมูลนั้นมีได้หลายวิธี อาทิเช่น การเปลี่ยนแปลงคุณลักษณะ (Feature Engineering) การแปลงขนาดภาพ (Image Resizing) การแปลงข้อมูลเสียง (Audio Transformation) และอื่นๆ
การแปลงข้อมูลที่ถูกต้องจะช่วยให้โมเดล Deep Learning มีประสิทธิภาพสูง และทำให้โมเดลสามารถเรียนรู้และทำนายผลได้ถูกต้องมากขึ้น ตัวอย่างเช่น การแปลงขนาดภาพ (Image Resizing) ทำให้ภาพมีขนาดเหมือนกัน และลดจำนวนข้อมูลเพื่อให้โมเดลสามารถเรียนรู้ได้เร็วขึ้น การเปลี่ยนแปลงคุณลักษณะ (Feature Engineering) อาจทำการเลือกคุณลักษณะที่เกี่ยวข้องกับผลลัพธ์ที่ต้องการทำนาย เพื่อลดจำนวนคุณลักษณะที่ไม่เกี่ยวข้องออกไป และทำให้โมเดลเรียนรู้ได้เร็วขึ้นและมีประสิทธิภาพสูงขึ้น การแปลงข้อมูลเป็นส่วนสำคัญของกระบวนการเตรียมข้อมูล (Data Preparation) และช่วยให้โมเดล Deep Learning มีประสิทธิภาพสูงที่สุดในการทำนายผลลัพธ์ที่ต้องการ
ตัวอย่าง การแปลงข้อมูล (Data Transformation) สำหรับ Deep Learning ด้วยไลบรารี Scikit-learn
from sklearn.preprocessing import MinMaxScaler
import numpy as np
# สร้างข้อมูลตัวอย่าง
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# สร้างตัวแปร scaler และทำการเรียนรู้ช่วงของการแปลงข้อมูล
scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit(X)
# แปลงข้อมูล
transformed_X = scaler.transform(X)
# แสดงผล
print(transformed_X)
ผลลัพธ์คือ
[[0. 0. 0. ]
[0.5 0.5 0.5 ]
[1. 1. 1. ]]
จากตัวอย่าง ได้สร้างข้อมูลตัวอย่างที่เป็นเมตริกซ์ 3×3 และใช้ MinMaxScaler เพื่อทำการเรียนรู้ช่วงของข้อมูลและแปลงข้อมูลตามช่วงนั้น ซึ่งในที่นี้จะแปลงข้อมูลให้อยู่ในช่วง 0 ถึง 1 ดังนั้นค่าที่แสดงออกมาจะเป็นตัวเลขในช่วงนี้ ตัวอย่างนี้เป็นการแปลงข้อมูลให้อยู่ในช่วงเดียวกันซึ่งเป็นสิ่งที่สำคัญสำหรับการสร้างและฝึกโมเดล Deep Learning โดยทั่วไปเราจะต้องแปลงข้อมูลให้อยู่ในช่วงที่เหมาะสมสำหรับการฝึกโมเดลในการเรียนรู้เชิงลึก
ตัวอย่าง การแปลงข้อมูล (Data Transformation) สำหรับ Deep Learning ด้วยการใช้งาน TensorFlow
import tensorflow as tf
# โหลดชุดข้อมูล MNIST
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# แปลงค่าความลึกของสีจากช่วง 0-255 เป็นช่วง 0-1
train_images = train_images / 255.0
test_images = test_images / 255.0
# แปลงรูปภาพจากขนาด 28x28 เป็นเวกเตอร์ขนาด 784
train_images = train_images.reshape(train_images.shape[0], 784)
test_images = test_images.reshape(test_images.shape[0], 784)
# แปลงค่า label เป็น one-hot encoding
train_labels = tf.keras.utils.to_categorical(train_labels, 10)
test_labels = tf.keras.utils.to_categorical(test_labels, 10)
จากตัวอย่าง ได้ใช้ชุดข้อมูล MNIST ที่เป็นชุดข้อมูลที่มีรูปภาพของตัวเลข 0-9 และเรามีการแปลงข้อมูลโดยการแปลงค่าความลึกของสีจากช่วง 0-255 เป็นช่วง 0-1 และแปลงรูปภาพจากขนาด 28×28 เป็นเวกเตอร์ขนาด 784 เพื่อให้ง่ายต่อการประมวลผล ส่วน label จะถูกแปลงเป็น one-hot encoding ซึ่งเป็นการแปลงค่า label เป็นเวกเตอร์ของตัวเลข 0 และ 1 ที่มีความยาวเท่ากับจำนวนคลาสของข้อมูล ในที่นี้คือ 10 คลาส (ตัวเลข 0-9)