【Python例項第12講】譜系共聚類法
阿新 • • 發佈:2018-11-29
機器學習訓練營——機器學習愛好者的自由交流空間(qq 群號:696721295)
這個例子演示如何產生一個數據集,並且用譜系共聚類法(Spectral Co-Clustering algorithm
)對它進行雙向聚類。所謂“雙向聚類”,是指對變數和例項同時聚類。
這裡,使用函式make_biclusters
產生雙向聚類的資料集。該函式產生的矩陣元素較小,但嵌入的雙向類bicluster
具有較大的值。然後隨機重排矩陣的行和列,作為引數傳遞給演算法。再重新排列這個隨機重排的矩陣,使得biclusters鄰接。這樣一來就可以看出演算法的準確程度了。
例項詳解
首先,匯入必需的庫。
print(__doc__) # Author: Kemal Eren <[email protected]> # License: BSD 3 clause import numpy as np from matplotlib import pyplot as plt from sklearn.datasets import make_biclusters from sklearn.datasets import samples_generator as sg from sklearn.cluster.bicluster import SpectralCoclustering from sklearn.metrics import consensus_score
呼叫函式make_biclusters, 產生一個300行,300列的資料陣列,該陣列有一個用於雙向聚類的固定對角塊結構。預置5個biclusters, 5個標準差的高斯誤差。作圖顯示產生的資料集。
data, rows, columns = make_biclusters(
shape=(300, 300), n_clusters=5, noise=5,
shuffle=False, random_state=0)
plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Original dataset")
plt.show()
隨機重排資料集。
data, row_idx, col_idx = sg._shuffle(data, random_state=0)
plt.matshow(data, cmap=plt.cm.Blues)
plt.title("Shuffled dataset")
plt.show()
呼叫bicluster庫的譜系共聚類函式SpectralCoclustering
, 設定5個biclusters. 擬合模擬資料集,並計算聚類一致性分數,評價聚類效果。
model = SpectralCoclustering(n_clusters=5, random_state=0)
model.fit(data)
score = consensus_score(model.biclusters_,
(rows[:, row_idx], columns[:, col_idx]))
print("consensus score: {:.3f}".format(score))
consensus score: 1.000
視覺化重新排列共聚類後的資料集。
fit_data = data[np.argsort(model.row_labels_)]
fit_data = fit_data[:, np.argsort(model.column_labels_)]
plt.matshow(fit_data, cmap=plt.cm.Blues)
plt.title("After biclustering; rearranged to show biclusters")
plt.show()
閱讀更多精彩內容,請關注微信公眾號:統計學習與大資料