1. 程式人生 > >【Python例項第12講】譜系共聚類法

【Python例項第12講】譜系共聚類法

機器學習訓練營——機器學習愛好者的自由交流空間(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()

在這裡插入圖片描述

閱讀更多精彩內容,請關注微信公眾號:統計學習與大資料