PCA (Principal Component Analysis)

PCA (Principal Component Analysis)
Prompt : Geek data scientist is developing a machine learning model in a start-up company. He is in the co-working area. The company name is Nerd, which has a blue logo. Created by Leonardo.ai

เป็นเทคนิคที่จัดอยู่ในประเภทของ Unsupervised Learning ใช้สำหรับการลดจำนวนมิติของข้อมูล (Dimensionality Reduction) ถูกนำมาใช้ในการประมวลผลข้อมูลก่อนหน้า (Data Pre-processing) เนื่องจากการใช้ข้อมูลที่มีมิติจำนวนมาก สำหรับ Train Machine Learning Model อาจส่งผลทำให้ประสิทธิภาพของ Model แย่ลง

มีวลีที่กล่าวไว้ว่า Curse of Dimensionality หรือ คำสาปแห่งมิติ ดังนั้นการจัดการให้ข้อมูลอยู่ในจำนวนมิติที่เหมาะสม จึงเป็นสิ่งจำเป็น
Prompt: Curse of dimensionality in machine learning Created by Leonardo.ai

PCA เป็นเทคนิคการลดจำนวนมิติที่นิยมนำมาใช้ ทั้งในการสร้าง Machine Learning Model และการวิเคราะห์ข้อมูล ช่วยลดจำนวน Features ในชุดข้อมูลโดยการแปลงให้เป็น Features ชุดใหม่ (Uncorrelated Features) เรียกว่า PCA มีประโยชน์เมื่อต้องจัดการกับชุดข้อมูลที่มีจำนวน Features มากๆ (จำนวนมิติสูง) หรือใช้ในการทำ Data Visualization

ทำความเข้าใจกับ PCA

แนวคิดหลักเบื้องหลัง PCA คือ การค้นหาองค์ประกอบหลัก (Principal Components) ซึ่งแสดงความแปรปรวน (Variance) มากที่สุด ซึ่งส่วนประกอบหลักเหล่านี้ตั้งฉากซึ่งกันและกัน เพื่อให้แน่ใจว่าองค์ประกอบเหล่านี้จะ Capture แง่มุมที่แตกต่างกันของการเปลี่ยนแปลงของข้อมูล

ขั้นตอนการทำงานของ PCA

  1. ทำให้ข้อมูลเป็นมาตรฐาน (Standardization): ข้อมูลจะถูกทำให้เป็นมาตรฐานโดยการลบค่าเฉลี่ยออกจากแต่ละ Features แล้วหารด้วยค่าเบี่ยงเบนมาตรฐาน (การคำนวน z-score) เพื่อให้แน่ใจว่าฟีเจอร์ทั้งหมดอยู่ในระดับเดียวกันและมีความสำคัญเท่ากัน
  2. คำนวณ Covariance Matrix: เพื่อ Capture ความสัมพันธ์ (Relationships) ระหว่าง Features ต่างๆ
  3. คำนวณ Eigenvectors และ Eigenvalues: ค่า Eigenvectors และ Eigenvalues ของ Covariance Matrix จะถูกคำนวณ Eigenvectors แสดงถึง Principal Components และ Eigenvalues แสดงถึงจำนวนความแปรปรวนที่จับได้โดยแต่ละ Principal Component
  4. จัดเรียง Eigenvectors: โดยเรียงจากมากไปน้อยตาม Eigenvalues ที่สอดคล้องกัน โดย Eigenvectors ที่มี Eigenvalues สูงสุดจะจับความแปรปรวนของข้อมูลได้มากที่สุด
  5. เลือกส่วนประกอบหลัก: เลือก k Eigenvectors สูงสุด (ส่วนประกอบหลัก) โดยที่ k คือจำนวนมิติที่ต้องการ (มีการลดลงจากดั้งเดิม)
  6. Project ข้อมูลไปยัง Principal Components: ข้อมูลต้นฉบับถูก Project ไปบน Principal Components k ซึ่งถูก Transform เป็น k dimensional space อันใหม่

PCA โดยใช้ Python

การทำ PCA โดยใช้ Python และ Scikit-learn Library

from sklearn.decomposition import PCA
import numpy as np

# Sample data
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

# Create a PCA instance
pca = PCA(n_components=2)

# Fit and transform the data
X_pca = pca.fit_transform(X)

print("Original Data:")
print(X)
print("\nTransformed Data:")
print(X_pca)

ในตัวอย่าง ทำการสร้างชุดข้อมูล 2D X ที่มีข้อมูลสี่จุด จากนั้นสร้าง PCA instance ด้วย n_components=2 ซึ่งหมายความว่า ต้องการลดข้อมูลให้เป็น 2 มิติ (มิติดั้งเดิม)

วิธีการ fit_transform ใช้เพื่อปรับโมเดล PCA ให้พอดีกับข้อมูล และแปลงเป็นพื้นที่ส่วนประกอบหลักใหม่ ข้อมูลที่แปลง X_pca เป็นอาร์เรย์ 2 มิติ โดยแต่ละแถวแสดงถึงจุดข้อมูลในพื้นที่ที่ลดลง

ผลลัพธ์ที่ได้

Original Data:
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

Transformed Data:
[[-2.67766362  0.59734547]
 [-0.67766362 -1.40265453]
 [ 0.67766362 -1.40265453]
 [ 2.67766362  0.59734547]]

ในตัวอย่างนี้ ข้อมูล 2D ดั้งเดิมได้ถูกแปลงเป็น 2D dimensional space อันใหม่ โดยที่ Principal Components จะจับความแปรปรวน (Variance) สูงสุดของข้อมูล

เมื่อใดจึงควรใช้ PCA

  • Data Visualization: PCA สามารถใช้เพื่อแสดงภาพข้อมูลจำนวนมิติมากๆ ได้โดย Project ลงใน New Space ที่มิติต่ำกว่า ทำให้ง่ายต่อการมองเห็น Patterns และ Trends ของข้อมูล
  • Dimensionality Reduction: ด้วยการลดจำนวน Features การใช้ PCA ทำให้ประสิทธิภาพของ Machine Learning Model ดีกว่า และยังลดความซับซ้อนในการคำนวณ
  • Noise Removal: PCA สามารถใช้เพื่อกำจัด Noise ออกจากข้อมูลได้โดยละทิ้ง Principal Components ที่มีนัยสำคัญน้อยกว่า
  • Feature Extraction: Principal Components ที่ได้จาก PCA สามารถใช้เป็น Features ใหม่ สำหรับ Machine Learning Models ได้ ซึ่งอาจทำให้ได้ประสิทธิภาพที่ดีกว่า

PCA เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการลดจำนวนมิติและการสำรวจข้อมูล อย่างไรก็ตาม สิ่งสำคัญที่ควรทราบคือ PCA ใช้ได้กับความสัมพันธ์ที่เป็นเชิงเส้น (Linear) ระหว่างคุณลักษณะต่างๆ และอาจไม่มีประสิทธิภาพในการจัดการกับความสัมพันธ์ที่ไม่เชิงเส้น (Non-Linear) ในข้อมูล


หมายเหตุ : บทความนี้ เขียนร่วมกับ Claude.ai (Haiku) โดยใช้ Prompt ดังนี้

Please write a blog of PCA with python code.