การลดมิติด้วย PCA

Unsupervised Learning ใน Python

Benjamin Wilson

Director of Research at lateral.io

การลดมิติ

  • แสดงข้อมูลเดิมโดยใช้ฟีเจอร์น้อยลง
  • เป็นส่วนสำคัญของ pipeline การเรียนรู้ของเครื่อง
  • ทำได้โดยใช้ PCA
Unsupervised Learning ใน Python

การลดมิติด้วย PCA

  • ฟีเจอร์ PCA เรียงตามความแปรปรวนจากมากไปน้อย
  • ถือว่าฟีเจอร์ที่มีความแปรปรวนต่ำคือ "สัญญาณรบกวน"
  • ... และฟีเจอร์ที่มีความแปรปรวนสูงมีข้อมูลที่มีประโยชน์

กราฟแท่งแสดงหมายเลขฟีเจอร์ PCA เทียบกับความแปรปรวน มีเส้นแนวตั้งระหว่างหมายเลข 1 และ 2 พร้อมลูกศรซ้ายระบุว่า informative และลูกศรขวาระบุว่า noisy

Unsupervised Learning ใน Python

การลดมิติด้วย PCA

  • ระบุจำนวนฟีเจอร์ที่ต้องการเก็บ
  • เช่น PCA(n_components=2)
  • เก็บ 2 ฟีเจอร์ PCA แรก
  • มิติภายในเป็นค่าที่เหมาะสม
Unsupervised Learning ใน Python

การลดมิติของชุดข้อมูล iris

  • samples = อาร์เรย์ของข้อมูลการวัด iris (4 ฟีเจอร์)
  • species = รายการหมายเลขสายพันธุ์ iris
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pca.fit(samples)
PCA(n_components=2)
transformed = pca.transform(samples)
print(transformed.shape)
(150, 2)
Unsupervised Learning ใน Python

ชุดข้อมูล iris ใน 2 มิติ

  • PCA ลดมิติเหลือ 2
  • เก็บ 2 ฟีเจอร์ PCA ที่มีความแปรปรวนสูงสุด
  • ข้อมูลสำคัญยังคงอยู่: สายพันธุ์ยังคงแยกจากกันชัดเจน
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

กราฟกระจายของ PCA ที่ทำกับชุดข้อมูล Iris

Unsupervised Learning ใน Python

การลดมิติด้วย PCA

  • ตัดฟีเจอร์ PCA ที่มีความแปรปรวนต่ำออก
  • ถือว่าฟีเจอร์ที่มีความแปรปรวนสูงมีข้อมูลที่มีประโยชน์
  • สมมติฐานนี้มักเป็นจริงในทางปฏิบัติ (เช่น กับ iris)
Unsupervised Learning ใน Python

อาร์เรย์ความถี่คำ

  • แถวแทนเอกสาร คอลัมน์แทนคำ
  • ค่าในตารางวัดการปรากฏของแต่ละคำในแต่ละเอกสาร
  • ... วัดโดยใช้ "tf-idf" (จะอธิบายเพิ่มเติมภายหลัง)

อาร์เรย์ความถี่คำ

Unsupervised Learning ใน Python

อาร์เรย์แบบ Sparse และ csr_matrix

  • "Sparse": ส่วนใหญ่ของค่าในตารางเป็นศูนย์
  • ใช้ scipy.sparse.csr_matrix แทน NumPy array ได้
  • csr_matrix เก็บเฉพาะค่าที่ไม่ใช่ศูนย์ (ประหยัดหน่วยความจำ!)

อาร์เรย์ความถี่คำ

Unsupervised Learning ใน Python

TruncatedSVD และ csr_matrix

  • PCA ของ scikit-learn ไม่รองรับ csr_matrix
  • ใช้ TruncatedSVD ของ scikit-learn แทน
  • ให้ผลการแปลงเหมือนกัน
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Unsupervised Learning ใน Python

มาฝึกกันเถอะ!

Unsupervised Learning ใน Python

Preparing Video For Download...