OPTICS (Ordering Points To Identify the Clustering Structure) 是一種用於密度基礎聚類的算法。它擴展了 DBSCAN 的概念,並解決了 DBSCAN 對於不同密度的資料集表現不佳的問題。OPTICS 主要通過產生一個排序的資料點列表來識別聚類結構,這個列表根據資料點之間的密度關係排序。與 DBSCAN 不同,OPTICS 可以更好地處理具有不同密度區域的資料集。
核心距離 (Core Distance):一個點的核心距離是指該點在其鄰域內可以成為核心點所需的最小距離。如果一個點沒有足夠的鄰居來形成一個核心點,那麼它的核心距離是無窮大。
可達距離 (Reachability Distance):對於給定點 A 和鄰居點 B,B 的可達距離是 B 與 A 的距離和 A 的核心距離中的較大者。這個距離度量了點 B 到達點 A 的難易程度。
排序 (Ordering):OPTICS 通過按點的可達距離對點進行排序,從而產生一個類似於資料層次結構的表示。這種排序使得 OPTICS 能夠識別不同密度的聚類。
選擇一個未訪問過的點作為當前點,計算其核心距離和可達距離。
按照可達距離將當前點的鄰居點插入訂單列表,並標記當前點已訪問。
重複這個過程直到所有點都被訪問過。
from sklearn.cluster import OPTICS
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
optics = OPTICS(min_samples=5, xi=0.05, min_cluster_size=0.1)
optics.fit(X)
plt.figure(figsize=(10, 7))
plt.scatter(X[:, 0], X[:, 1], c=optics.labels_, cmap='plasma')
plt.title('OPTICS Clustering on Iris Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()