การจัดกลุ่มและโมเดลคลัสเตอร์

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Histogram ของผลลัพธ์โมเดล

  • สำรวจผลลัพธ์ของโมเดล
  • ระบุจุดเปลี่ยนและคอขวด
  • ปรับแต่งระบบให้เหมาะสม

Histogram

  • กราฟแสดงการกระจายความถี่
  • แสดงจำนวนการสังเกตในช่วงที่กำหนด

แพ็กเกจ Matplotlib

import matplotlib.pyplot as plt

การใช้งาน: สร้าง histogram จากชุดข้อมูล data โดยใช้ 50 bins

plt.hist(data, bins=50)

Histogram ที่มี 50 bins แสดงการกระจายแบบเกาส์เซียนสองชุด ชี้ให้เห็นคลัสเตอร์ข้อมูลสองกลุ่ม

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

การวิเคราะห์คลัสเตอร์และการประยุกต์ใช้กับโมเดล

  • การประยุกต์ใช้
    • การจดจำรูปแบบ (เช่น ผลลัพธ์ของโมเดล)
    • การวิเคราะห์ภาพ

ภาพถ่ายดาวเทียมแสดงแสงไฟในตอนกลางคืนของทวีปอเมริกาเหนือ

  • การบีบอัดข้อมูล
  • คอมพิวเตอร์กราฟิกส์
  • Machine learning

    ภาพแสดงโครงข่ายประสาทในสมอง สื่อถึงการใช้เทคนิคนี้ใน machine learning และการเกิดขึ้นของรูปแบบข้อมูลและการจัดกลุ่ม

  • ในโมเดล discrete-event

    • ระบุรูปแบบผลลัพธ์ของโมเดล
    • ได้ข้อมูลที่นำไปใช้งานได้จริงมากขึ้น
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

k-means clustering

จุดสนใจหลัก

  • k-means clustering (centroid model)
  • แบ่งการสังเกตออกเป็น k คลัสเตอร์
  • แต่ละการสังเกตอยู่ในคลัสเตอร์ที่มีค่าเฉลี่ยใกล้ที่สุด
  • ค่าเฉลี่ยของคลัสเตอร์เรียกว่า "Cluster centroids"

การสังเกตและ cluster centroids

กราฟแสดงข้อมูลพร้อม cluster centroids ที่คำนวณด้วย k-means clustering

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

k-means clustering ด้วย SciPy

เมธอดใน SciPy

scipy.cluster.vq.kmeans()

การใช้งาน

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs คือ numpy array
  • ค่าที่คืนกลับมา:
    1. Cluster centroids
    2. Distortion (ระยะทางเฉลี่ยระหว่างการสังเกตกับ centroids ที่สร้างขึ้น)
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

Data whitening: การลบความสัมพันธ์และการปรับขนาด

ก่อนรัน k-means: Data whitening

  1. ลบความสัมพันธ์ในข้อมูล obs
  2. ปรับขนาดแต่ละมิติของ obs ด้วยส่วนเบี่ยงเบนมาตรฐาน

กราฟสามแผงแสดงข้อมูลที่มีความสัมพันธ์ ข้อมูลที่ลบความสัมพันธ์แล้ว และข้อมูลหลังผ่าน whitening ตามลำดับ

ใน SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs คือ numpy array
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

ตัวอย่าง whitening และ k-means

  • กิจกรรมการผลิตที่มีหลายกระบวนการ
  • มาดูผลกระทบของ Process 1

กราฟแสดงระยะเวลาของ process 1 เทียบกับระยะเวลารวม สำหรับข้อมูลดิบและข้อมูลหลัง whitening พร้อมคลัสเตอร์ที่คำนวณด้วย k-means

นำเข้าแพ็กเกจ

import scipy.cluster.vq as scvq

Whiten ผลลัพธ์ของโมเดล

white_data = scvq.whiten(model_results)

หา 2 คลัสเตอร์ (จุดสีน้ำเงิน)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

จำนวนคลัสเตอร์ที่เหมาะสม

เทคนิค

  • วิธีอย่างง่าย (จำนวนคลัสเตอร์สูงสุด)
  • Elbow method
  • Silhouette score coefficient
  • Gap statistic

วิธีอย่างง่าย

  • กำหนดจำนวนคลัสเตอร์สูงสุด
  • สูตรที่ใช้: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = จำนวนการสังเกต
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • ผลลัพธ์จาก console
    22
    
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

จำนวนคลัสเตอร์ที่เหมาะสม: วิธี Silhouette score

  • นำเข้าไลบรารี
from sklearn.metrics import silhouette_score

คำนวณ silhouette scores สำหรับจำนวนคลัสเตอร์ k

for k in range(2, 6):
  model = KMeans(n_clusters=k)
  model.fit(model_results)
  pred = model.predict(model_results)
  score = silhouette_score(model_results, pred)

ผลลัพธ์จาก console

Silhouette Score for k = 2: 0.591
Silhouette Score for k = 3: 0.472
Silhouette Score for k = 4: 0.381
Silhouette Score for k = 5: 0.364
Silhouette Score for k = 6: 0.373

การแปลผล

  • ค่าดีที่สุด: score = 1
  • ค่าแย่ที่สุด: score = -1
  • คลัสเตอร์ทับซ้อนกัน: score ใกล้ 0
การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

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

การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python

Preparing Video For Download...