層次聚類演算法是一種將資料點分組的無監督學習演算法,也被稱為層次聚合(hierarchical clustering)或分級聚合(hierarchical clustering)演算法。它根據點與點之間的相似性或距離,在不斷地合併最相似的點或群集,最後得到一棵樹形結構(也叫聚類樹或分類樹),將所有點分為若干個簇。
Python是廣泛使用的程式語言之一,擁有許多強大的資料處理和視覺化工具,層次聚類演算法也有很多實作。在本篇文章中,我們將討論Python中實作層次聚類演算法的方法和一些最佳實踐。
資料的準備
在開始層次聚類之前,需要先準備好用來聚類的資料集。一般而言,這些資料集應該滿足以下條件:
在Python中,我們可以使用pandas庫來載入、準備和預處理資料。 pandas提供了DataFrame資料結構,可以方便地處理表格資料。以下是一個簡單的例子:
import pandas as pd # 读取csv文件 data = pd.read_csv('data.csv') # 对数据进行预处理(比如标准化) data = (data - data.mean()) / data.std()
其中,我們首先呼叫pandas的read_csv
函數讀取一個csv文件,然後將讀取的資料進行標準化處理,以便將資料放入演算法中。
聚類演算法的選擇
在Python中,有許多聚類演算法可供選擇,而層次聚類演算法是其中之一。但是,它需要根據資料的特徵和需求來選擇合適的演算法。
在經典層次聚類演算法中,有兩種主要的連結方法:最小距離和最大距離。最小距離(或稱為單聯通性)方法比較兩個群體中最相似的點,而最大距離(或稱為全聯通性)方法則比較兩個群體中最不相似的點。另外,還有一種平均連結方法(也叫UPGMA演算法),它使用兩個群體之間的平均距離來計算相似性。在Python中,我們可以使用scipy函式庫中的linkage
函數來執行層次聚類。以下是一個簡單的範例:
from scipy.cluster.hierarchy import linkage # 进行层次聚类 Z = linkage(data, method='single')
在這個範例中,我們使用linkage
函數進行最小距離聚類。函數的第一個參數是數據,第二個參數是使用的連結方法。這裡我們使用了'single'
方法,也就是最小距離連結方法。
樹狀結構的視覺化
樹狀結構是層次聚類演算法的核心部分,可以使用樹狀圖對其進行視覺化。 Python提供了許多用於視覺化的工具,其中最受歡迎的兩個是matplotlib和seaborn函式庫。
以下是使用matplotlib函式庫繪製樹狀圖的簡單範例:
import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram fig, ax = plt.subplots(figsize=(15, 10)) # 绘制树状图 dendrogram(Z, ax=ax, leaf_font_size=8) plt.show()
在這個範例中,我們先建立了一個有ax軸的畫布,然後呼叫dendrogram
函數繪製樹狀圖。此函數的第一個參數是Z矩陣,第二個參數是軸物件。 leaf_font_size
參數用於調整葉子大小。
使用seaborn庫我們可以獲得更美觀和互動性更強的視覺化效果。以下是使用seaborn庫繪製樹狀圖的例子:
import seaborn as sns sns.set(style='white') # 将聚类结果转换为DataFrame df = pd.DataFrame({'x': data.index, 'y': Z[:, 2]}) # 绘制树状图 sns.scatterplot(x='x', y='y', data=df, s=50, legend=False) plt.show()
在這個例子中,我們首先將聚類結果轉換為一個資料幀,然後使用seaborn庫中的scatterplot
函數繪製樹狀圖。 s
參數用於調整點的大小。
簇的選擇
在層次聚類演算法中,有兩種選擇簇的方法:基於距離(即樹狀圖中的高度)和基於數量。基於距離是指將最大距離或最小距離設為閾值,並將樹狀圖割開,形成簇狀。基於數量是指選擇一定數量的簇,通常是從最大距離或最小距離開始。這兩種方法都有其優點和缺點,需要根據具體情況選擇。
以下是一個將層次聚類結果轉換為簇列表的簡單範例:
from scipy.cluster.hierarchy import fcluster # 将层次聚类结果转换为簇列表 clusters = fcluster(Z, t=2.0, criterion='distance')
在這個範例中,我們使用fcluster
函數將層次聚類結果轉換為簇列表。此函數的第一個參數是Z矩陣,第二個參數是閾值,第三個參數是決定閾值類型的標準。
總結
在本篇文章中,我們討論了Python中實作層次聚類演算法的方法和一些最佳實踐。我們首先了解了資料的準備工作,然後討論了演算法的選擇和樹形結構的可視化。最後,我們討論了簇的選擇方法。這些方法可以幫助我們更好地理解層次聚類演算法,使得我們可以將其應用到自己的資料中,從而得到有用的結論。
以上是Python中的層次聚類演算法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!