人工智能和機(jī)器學(xué)習(xí)之聚類算法:層次聚類:構(gòu)建層次聚類樹:凝聚層次聚類_第1頁
人工智能和機(jī)器學(xué)習(xí)之聚類算法:層次聚類:構(gòu)建層次聚類樹:凝聚層次聚類_第2頁
人工智能和機(jī)器學(xué)習(xí)之聚類算法:層次聚類:構(gòu)建層次聚類樹:凝聚層次聚類_第3頁
人工智能和機(jī)器學(xué)習(xí)之聚類算法:層次聚類:構(gòu)建層次聚類樹:凝聚層次聚類_第4頁
人工智能和機(jī)器學(xué)習(xí)之聚類算法:層次聚類:構(gòu)建層次聚類樹:凝聚層次聚類_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

人工智能和機(jī)器學(xué)習(xí)之聚類算法:層次聚類:構(gòu)建層次聚類樹:凝聚層次聚類1層次聚類簡介1.11層次聚類的基本概念層次聚類是一種無監(jiān)督學(xué)習(xí)方法,用于發(fā)現(xiàn)數(shù)據(jù)中的自然分組或?qū)哟谓Y(jié)構(gòu)。與K-means等其他聚類算法不同,層次聚類不需要預(yù)先指定聚類的數(shù)量,而是通過構(gòu)建一個樹狀圖(稱為聚類樹或樹狀圖)來展示數(shù)據(jù)點之間的相似性或距離關(guān)系。這個樹狀圖可以被切割以產(chǎn)生任意數(shù)量的聚類。1.1.1優(yōu)點靈活性:層次聚類可以產(chǎn)生不同數(shù)量的聚類,只需在樹狀圖上選擇不同的切割點??梢暬簶錉顖D提供了一種直觀的方式來理解數(shù)據(jù)的層次結(jié)構(gòu)。1.1.2缺點計算復(fù)雜度:對于大數(shù)據(jù)集,層次聚類的計算成本可能較高。敏感性:結(jié)果可能對距離度量和聚類樹的構(gòu)建方法敏感。1.22層次聚類的類型:凝聚與分裂層次聚類主要分為兩種類型:凝聚層次聚類和分裂層次聚類。1.2.1凝聚層次聚類凝聚層次聚類(AgglomerativeHierarchicalClustering)從每個數(shù)據(jù)點作為一個單獨的聚類開始,然后逐步合并最相似的聚類,直到所有點合并為一個聚類或達(dá)到某個停止條件。1.2.2分裂層次聚類分裂層次聚類(DivisiveHierarchicalClustering)則相反,從所有數(shù)據(jù)點屬于一個聚類開始,然后逐步將聚類分割成更小的子聚類。1.33凝聚層次聚類的工作原理凝聚層次聚類的工作流程如下:初始化:每個數(shù)據(jù)點被視為一個獨立的聚類。距離計算:計算所有聚類對之間的距離或相似度。合并:將距離最近的兩個聚類合并為一個。重復(fù):重復(fù)步驟2和3,直到所有點合并為一個聚類或達(dá)到預(yù)設(shè)的停止條件。1.3.1距離度量常見的距離度量包括:-單鏈(SingleLinkage):兩個聚類之間的距離定義為它們之間最近的兩個點的距離。-完全鏈(CompleteLinkage):兩個聚類之間的距離定義為它們之間最遠(yuǎn)的兩個點的距離。-平均鏈(AverageLinkage):兩個聚類之間的距離定義為它們之間所有點對的平均距離。-Ward方法:基于最小方差的原則合并聚類。1.3.2示例代碼假設(shè)我們有以下數(shù)據(jù)集:data=[[1,2],[2,1],[3,4],[4,3],[5,6],[6,5]]我們將使用Python的scipy庫來執(zhí)行凝聚層次聚類。importnumpyasnp

fromscipy.cluster.hierarchyimportlinkage,dendrogram

importmatplotlib.pyplotasplt

#數(shù)據(jù)點

data=np.array([[1,2],[2,1],[3,4],[4,3],[5,6],[6,5]])

#使用Ward方法進(jìn)行凝聚層次聚類

Z=linkage(data,'ward')

#繪制樹狀圖

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹狀圖')

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()1.3.3代碼解釋數(shù)據(jù)準(zhǔn)備:我們首先創(chuàng)建了一個包含六個點的數(shù)據(jù)集。聚類執(zhí)行:使用linkage函數(shù)執(zhí)行凝聚層次聚類,參數(shù)'ward'表示我們使用Ward方法來計算聚類間的距離。樹狀圖繪制:使用dendrogram函數(shù)繪制聚類樹,這有助于我們理解聚類的層次結(jié)構(gòu)。通過這個樹狀圖,我們可以直觀地看到數(shù)據(jù)點是如何逐步合并成更大的聚類的,從而幫助我們選擇合適的聚類數(shù)量。2凝聚層次聚類算法詳解2.11距離度量方法:點間距離、鏈路距離在凝聚層次聚類中,距離度量是核心步驟之一,用于確定不同簇之間的相似度。主要的距離度量方法包括點間距離和鏈路距離。2.1.1點間距離點間距離是最直觀的距離度量方法,它計算兩個簇中所有點對之間的距離,然后選擇最小、最大或平均距離作為兩個簇之間的距離。2.1.1.1示例代碼:計算點間距離importnumpyasnp

fromscipy.spatial.distanceimportpdist,squareform

#示例數(shù)據(jù)

data=np.array([[1,2],[2,1],[4,5],[5,4]])

#計算點間距離矩陣

distance_matrix=pdist(data,metric='euclidean')

distance_matrix=squareform(distance_matrix)

print("點間距離矩陣:\n",distance_matrix)2.1.2鏈路距離鏈路距離包括單鏈路、全鏈路和平均鏈路,它們分別基于簇中點的最小、最大和平均距離。2.1.2.1單鏈路(SingleLinkage)單鏈路選擇兩個簇中最近的點對之間的距離作為簇間距離。2.1.2.2全鏈路(CompleteLinkage)全鏈路選擇兩個簇中最遠(yuǎn)的點對之間的距離作為簇間距離。2.1.2.3平均鏈路(AverageLinkage)平均鏈路計算兩個簇中所有點對的平均距離作為簇間距離。2.1.2.4示例代碼:使用平均鏈路構(gòu)建距離矩陣fromscipy.cluster.hierarchyimportlinkage

#使用平均鏈路計算距離矩陣

Z=linkage(data,method='average',metric='euclidean')

#Z矩陣表示了每次合并的簇以及它們之間的距離

print("Z矩陣:\n",Z)2.22凝聚層次聚類的步驟凝聚層次聚類算法遵循以下步驟:初始化:每個數(shù)據(jù)點被視為一個獨立的簇。計算距離:使用距離度量方法計算所有簇對之間的距離。合并簇:將距離最近的兩個簇合并為一個簇。更新距離矩陣:重新計算合并后簇與其他簇之間的距離。重復(fù)步驟3和4:直到所有點合并為一個簇或達(dá)到預(yù)設(shè)的簇數(shù)量。2.2.1示例代碼:凝聚層次聚類步驟fromscipy.cluster.hierarchyimportfcluster

#基于Z矩陣,設(shè)置聚類數(shù)量為2

clusters=fcluster(Z,2,criterion='maxclust')

print("聚類結(jié)果:\n",clusters)2.33距離矩陣與聚類樹的構(gòu)建2.3.1距離矩陣距離矩陣記錄了數(shù)據(jù)點或簇之間的距離,是構(gòu)建聚類樹的基礎(chǔ)。2.3.2聚類樹(Dendrogram)聚類樹是一種樹狀圖,展示了聚類過程中的簇合并情況,幫助確定最佳的聚類數(shù)量。2.3.2.1示例代碼:構(gòu)建并可視化聚類樹importmatplotlib.pyplotasplt

fromscipy.cluster.hierarchyimportdendrogram

#構(gòu)建聚類樹

dendrogram(Z)

#顯示圖形

plt.title('聚類樹')

plt.xlabel('數(shù)據(jù)點')

plt.ylabel('距離')

plt.show()通過上述代碼和數(shù)據(jù)樣例,我們可以清晰地看到如何使用Python中的scipy庫進(jìn)行凝聚層次聚類,包括計算點間距離、構(gòu)建距離矩陣、執(zhí)行聚類算法以及可視化聚類樹的全過程。這不僅有助于理解算法的工作原理,還能實際操作和應(yīng)用算法解決數(shù)據(jù)聚類問題。3構(gòu)建層次聚類樹的策略3.11單鏈策略:最小距離法3.1.1原理單鏈策略,也稱為最小距離法,是層次聚類中的一種方法。它基于以下原則:兩個簇之間的距離定義為這兩個簇中最近的兩個點之間的距離。因此,當(dāng)進(jìn)行簇合并時,選擇距離最近的兩個簇進(jìn)行合并,直到所有點被合并成一個簇。3.1.2示例代碼importnumpyasnp

fromscipy.cluster.hierarchyimportlinkage,dendrogram

importmatplotlib.pyplotasplt

#創(chuàng)建數(shù)據(jù)點

data=np.array([[1,2],[2,1],[3,4],[4,3],[5,5],[6,6],[7,7],[8,8],[9,9]])

#使用單鏈策略進(jìn)行層次聚類

Z=linkage(data,'single')

#繪制層次聚類樹

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹-單鏈策略')

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()3.1.3描述在上述代碼中,我們首先導(dǎo)入了必要的庫,然后創(chuàng)建了一個包含9個點的數(shù)據(jù)集。使用linkage函數(shù),我們應(yīng)用了單鏈策略進(jìn)行層次聚類。最后,我們繪制了層次聚類樹,以可視化聚類過程。3.22完全鏈策略:最大距離法3.2.1原理完全鏈策略,或稱為最大距離法,與單鏈策略相反。它定義兩個簇之間的距離為這兩個簇中相距最遠(yuǎn)的兩個點之間的距離。在合并簇時,選擇距離最遠(yuǎn)的兩個簇進(jìn)行合并,直到所有點被合并成一個簇。3.2.2示例代碼#使用完全鏈策略進(jìn)行層次聚類

Z=linkage(data,'complete')

#繪制層次聚類樹

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹-完全鏈策略')

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()3.2.3描述這段代碼與單鏈策略的代碼相似,只是在linkage函數(shù)中,我們使用了'complete'參數(shù),這代表我們使用的是完全鏈策略。通過比較單鏈和完全鏈策略的層次聚類樹,我們可以觀察到不同的聚類結(jié)果。3.33平均鏈策略:平均距離法3.3.1原理平均鏈策略,或稱為平均距離法,定義兩個簇之間的距離為這兩個簇中所有點對的平均距離。在合并簇時,選擇平均距離最小的兩個簇進(jìn)行合并。3.3.2示例代碼#使用平均鏈策略進(jìn)行層次聚類

Z=linkage(data,'average')

#繪制層次聚類樹

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹-平均鏈策略')

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()3.3.3描述在平均鏈策略中,我們使用'average'參數(shù)來計算簇間的平均距離。通過繪制層次聚類樹,我們可以看到基于平均距離的聚類結(jié)果。3.44重心法與中間距離法3.4.1重心法原理重心法定義兩個簇之間的距離為這兩個簇重心之間的距離。在合并簇時,選擇重心距離最小的兩個簇進(jìn)行合并。3.4.2示例代碼#使用重心法進(jìn)行層次聚類

Z=linkage(data,'centroid')

#繪制層次聚類樹

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹-重心法')

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()3.4.3描述重心法通過計算簇的重心來確定簇間的距離。在代碼中,我們使用'centroid'參數(shù)來應(yīng)用重心法,并繪制出層次聚類樹。3.4.4中間距離法原理中間距離法,也稱為Ward方法,它試圖最小化簇內(nèi)平方誤差的總和。在合并簇時,選擇合并后能最小化簇內(nèi)平方誤差的兩個簇進(jìn)行合并。3.4.5示例代碼#使用中間距離法進(jìn)行層次聚類

Z=linkage(data,'ward')

#繪制層次聚類樹

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹-中間距離法')

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()3.4.6描述中間距離法通過最小化簇內(nèi)平方誤差來優(yōu)化聚類結(jié)果。在代碼中,我們使用'ward'參數(shù)來應(yīng)用中間距離法,并繪制出層次聚類樹,以可視化聚類過程。通過上述示例,我們可以看到不同策略在層次聚類中的應(yīng)用,以及它們?nèi)绾斡绊懽罱K的聚類結(jié)果。每種策略都有其特點和適用場景,選擇合適的策略對于獲得有效的聚類結(jié)果至關(guān)重要。4凝聚層次聚類的實例分析4.11數(shù)據(jù)預(yù)處理與特征選擇數(shù)據(jù)預(yù)處理是機(jī)器學(xué)習(xí)中一個關(guān)鍵步驟,它包括清洗數(shù)據(jù)、處理缺失值、標(biāo)準(zhǔn)化數(shù)據(jù)和特征選擇等。在進(jìn)行凝聚層次聚類之前,我們首先需要對數(shù)據(jù)進(jìn)行預(yù)處理,確保數(shù)據(jù)的質(zhì)量和適用性。4.1.1數(shù)據(jù)清洗數(shù)據(jù)清洗涉及去除或修正數(shù)據(jù)中的錯誤、重復(fù)或不一致的信息。例如,如果數(shù)據(jù)集中存在重復(fù)的記錄,我們需要在分析前將其刪除。4.1.2處理缺失值對于存在缺失值的數(shù)據(jù),我們可以選擇填充缺失值或刪除含有缺失值的記錄。填充方法包括使用平均值、中位數(shù)或眾數(shù)等。4.1.3標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)化數(shù)據(jù)是將數(shù)據(jù)轉(zhuǎn)換到相同的尺度上,避免某些特征因數(shù)值范圍大而對聚類結(jié)果產(chǎn)生過大的影響。常用的方法有最小-最大縮放和Z-score標(biāo)準(zhǔn)化。4.1.4特征選擇特征選擇是選擇對聚類結(jié)果有貢獻(xiàn)的特征,去除無關(guān)或冗余的特征,以提高聚類效率和效果。4.1.5示例代碼假設(shè)我們有一個包含身高、體重和年齡的樣本數(shù)據(jù)集,我們將進(jìn)行數(shù)據(jù)預(yù)處理和特征選擇。importpandasaspd

fromsklearn.preprocessingimportStandardScaler

fromsklearn.imputeimportSimpleImputer

#創(chuàng)建示例數(shù)據(jù)

data={

'Height':[170,180,160,175,165,185,172,168,176,182],

'Weight':[65,80,55,70,58,85,68,60,72,78],

'Age':[25,30,22,28,24,32,26,23,29,27],

'Income':[50000,60000,45000,55000,48000,62000,52000,49000,53000,58000]

}

df=pd.DataFrame(data)

#處理缺失值

imputer=SimpleImputer(strategy='mean')

df['Weight']=imputer.fit_transform(df[['Weight']])

#標(biāo)準(zhǔn)化數(shù)據(jù)

scaler=StandardScaler()

df_scaled=pd.DataFrame(scaler.fit_transform(df),columns=df.columns)

#特征選擇

df_selected=df_scaled[['Height','Weight']]

print(df_selected)4.22構(gòu)建距離矩陣構(gòu)建距離矩陣是凝聚層次聚類的重要步驟,它用于衡量樣本之間的相似度或距離。距離矩陣是一個二維數(shù)組,其中每個元素表示兩個樣本之間的距離。4.2.1距離度量常見的距離度量方法有歐氏距離、曼哈頓距離和余弦相似度等。在本例中,我們將使用歐氏距離。4.2.2示例代碼使用scipy庫中的pdist和squareform函數(shù)來構(gòu)建距離矩陣。fromscipy.spatial.distanceimportpdist,squareform

#計算距離矩陣

distances=pdist(df_selected,metric='euclidean')

dist_matrix=squareform(distances)

print(dist_matrix)4.33選擇合適的鏈路策略鏈路策略決定了如何計算簇之間的距離。常見的鏈路策略有單鏈路、完全鏈路、平均鏈路和沃德鏈路等。4.3.1單鏈路策略單鏈路策略選擇兩個簇中最近的兩個點之間的距離作為簇間距離。4.3.2完全鏈路策略完全鏈路策略選擇兩個簇中最遠(yuǎn)的兩個點之間的距離作為簇間距離。4.3.3平均鏈路策略平均鏈路策略計算兩個簇中所有點對的平均距離作為簇間距離。4.3.4沃德鏈路策略沃德鏈路策略最小化簇內(nèi)平方誤差的增加,適用于球形簇。4.3.5示例代碼使用scipy庫中的linkage函數(shù)來選擇鏈路策略。fromscipy.cluster.hierarchyimportlinkage

#使用平均鏈路策略

Z=linkage(df_selected,method='average')

print(Z)4.44繪制層次聚類樹(樹狀圖)層次聚類樹,也稱為樹狀圖,是一種可視化層次聚類結(jié)果的方法。它顯示了樣本是如何逐步合并成簇的。4.4.1示例代碼使用scipy庫中的dendrogram函數(shù)來繪制層次聚類樹。importmatplotlib.pyplotasplt

fromscipy.cluster.hierarchyimportdendrogram

#繪制樹狀圖

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('層次聚類樹狀圖')

plt.xlabel('樣本索引')

plt.ylabel('距離')

plt.show()通過以上步驟,我們完成了凝聚層次聚類的實例分析,從數(shù)據(jù)預(yù)處理到特征選擇,再到構(gòu)建距離矩陣、選擇鏈路策略和繪制層次聚類樹,每一步都對最終的聚類結(jié)果有著重要影響。5凝聚層次聚類的優(yōu)缺點與應(yīng)用場景5.11凝聚層次聚類的優(yōu)點凝聚層次聚類(AgglomerativeHierarchicalClustering)是一種自下而上的聚類方法,它從每個數(shù)據(jù)點作為單獨的聚類開始,然后逐步合并最相似的聚類,直到達(dá)到預(yù)定的聚類數(shù)量或滿足某個停止條件。這種方法有幾個顯著的優(yōu)點:不需要預(yù)先指定聚類數(shù)量:與K-means等其他聚類算法不同,凝聚層次聚類不需要在開始時就確定聚類的數(shù)量,這使得它在處理未知數(shù)據(jù)結(jié)構(gòu)時更加靈活。生成層次結(jié)構(gòu):凝聚層次聚類生成的層次結(jié)構(gòu)可以提供數(shù)據(jù)的多尺度視圖,有助于理解數(shù)據(jù)的內(nèi)在結(jié)構(gòu)。魯棒性:對于數(shù)據(jù)中的噪聲和異常值,凝聚層次聚類通常比其他方法更具有魯棒性。可視化:層次聚類的結(jié)果可以很容易地通過樹狀圖(Dendrogram)來可視化,這有助于解釋和理解聚類結(jié)果。5.1.1示例代碼假設(shè)我們有一組二維數(shù)據(jù)點,我們將使用Python的scipy庫來執(zhí)行凝聚層次聚類,并生成樹狀圖。importnumpyasnp

fromscipy.cluster.hierarchyimportdendrogram,linkage

importmatplotlib.pyplotasplt

#創(chuàng)建數(shù)據(jù)點

data=np.array([[1,2],[2,1],[3,4],[4,3],[5,5],[6,6],[7,8],[8,7]])

#使用凝聚層次聚類

Z=linkage(data,'ward')#使用Ward方法

#繪制樹狀圖

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('樹狀圖')

plt.xlabel('樣本索引')

plt.ylabel('距離')

plt.show()在上述代碼中,我們首先導(dǎo)入了必要的庫,然后創(chuàng)建了一個二維數(shù)據(jù)點的數(shù)組。使用linkage函數(shù)執(zhí)行凝聚層次聚類,其中'ward'方法是最常用的距離計算方法,它最小化聚類內(nèi)的方差。最后,我們使用dendrogram函數(shù)生成樹狀圖,可視化聚類過程。5.22凝聚層次聚類的缺點盡管凝聚層次聚類有其獨特的優(yōu)勢,但它也存在一些缺點:計算復(fù)雜度高:對于大規(guī)模數(shù)據(jù)集,凝聚層次聚類的計算復(fù)雜度較高,因為它需要計算所有數(shù)據(jù)點之間的距離矩陣。合并決策不可逆:一旦兩個聚類被合并,這個決策就不能被撤銷。這意味著如果在后期發(fā)現(xiàn)合并錯誤,算法無法自動糾正。對初始距離矩陣敏感:算法的結(jié)果高度依賴于初始距離矩陣的計算,不同的距離度量方法可能會產(chǎn)生不同的聚類結(jié)果。難以處理非球形聚類:如果數(shù)據(jù)集中的聚類不是球形的,凝聚層次聚類可能無法很好地識別這些聚類。5.33凝聚層次聚類在不同領(lǐng)域的應(yīng)用案例凝聚層次聚類因其生成的層次結(jié)構(gòu)和對數(shù)據(jù)結(jié)構(gòu)的適應(yīng)性,在多個領(lǐng)域都有廣泛的應(yīng)用:生物信息學(xué):在基因表達(dá)數(shù)據(jù)分析中,凝聚層次聚類被用來識別基因的表達(dá)模式,幫助理解基因的功能和相互作用。圖像處理:在圖像分割和識別中,凝聚層次聚類可以用來識別圖像中的不同區(qū)域或?qū)ο?。市場?xì)分:在市場營銷中,凝聚層次聚類可以幫助企業(yè)識別不同的客戶群體,以便更有效地進(jìn)行市場定位和產(chǎn)品推廣。文檔分類:在文本挖掘中,凝聚層次聚類可以用來對文檔進(jìn)行分類,識別主題或類別。5.3.1生物信息學(xué)應(yīng)用示例在生物信息學(xué)中,我們可能有一組基因表達(dá)數(shù)據(jù),每個樣本代表一個基因在不同條件下的表達(dá)水平。下面是一個使用凝聚層次聚類對基因表達(dá)數(shù)據(jù)進(jìn)行聚類的示例:importpandasaspd

fromscipy.cluster.hierarchyimportdendrogram,linkage

importmatplotlib.pyplotasplt

#假設(shè)我們有以下基因表達(dá)數(shù)據(jù)

data=pd.DataFrame({

'Gene1':[1,2,3,4],

'Gene2':[2,3,4,5],

'Gene3':[10,11,12,13],

'Gene4':[11,12,13,14]

})

#計算基因之間的距離矩陣

dist_matrix=pdist(data.T,metric='euclidean')

#使用凝聚層次聚類

Z=linkage(dist_matrix,'ward')

#繪制樹狀圖

plt.figure(figsize=(10,5))

dendrogram(Z)

plt.title('基因表達(dá)數(shù)據(jù)的樹狀圖')

plt.xlabel('基因')

plt.ylabel('距離')

plt.show()在這個示例中,我們首先創(chuàng)建了一個包含基因表達(dá)數(shù)據(jù)的DataFrame。然后,我們使用pdist函數(shù)計算基因之間的距離矩陣,接著使用linkage函數(shù)執(zhí)行凝聚層次聚類。最后,我們生成樹狀圖來可視化基因之間的聚類關(guān)系。通過上述分析,我們可以看到凝聚層次聚類在處理各種類型的數(shù)據(jù)時的靈活性和有效性,同時也認(rèn)識到它在處理大規(guī)模數(shù)據(jù)集時的局限性。在選擇聚類算法時,應(yīng)根據(jù)具體的數(shù)據(jù)特性和需求來決定是否使用凝聚層次聚類。6實踐與代碼實現(xiàn)6.11Python中使用SciPy進(jìn)行凝聚層次聚類凝聚層次聚類是一種無監(jiān)督學(xué)習(xí)方法,它通過遞歸地合并最相似的簇來構(gòu)建一個層次結(jié)構(gòu)的簇樹。在Python中,我們可以使用SciPy庫中的scipy.cluster.hierarchy模塊來實現(xiàn)這一算法。下面,我們將通過一個具體的例子來展示如何使用SciPy進(jìn)行凝聚層次聚類。6.1.1數(shù)據(jù)準(zhǔn)備首先,我們需要準(zhǔn)備一些數(shù)據(jù)。這里,我們將使用一個簡單的二維數(shù)據(jù)集,包含10個樣本點。importnumpyasnp

#創(chuàng)建數(shù)據(jù)集

data=np.array([[1,2],[1.5,1.8],[5,8],[8,8],[1,0.6],[9,11],[8,2],[10,2],[9,3],[11,3]])6.1.2凝聚層次聚類接下來,我們將使用scipy.cluster.hierarchy.linkage函數(shù)來執(zhí)行凝聚層次聚類。此函數(shù)需要數(shù)據(jù)集和一個鏈接類型作為輸入,鏈接類型決定了簇合并的方式。fromscipy.cluster.hierarchyimportlinkage,dendrogram

#使用ward鏈接類型進(jìn)行凝聚層次聚類

Z=linkage(data,'ward')

#可視化層次聚類樹

dendrogram(Z)

plt.show()6.1.3參數(shù)解釋linkage(data,'ward')中的'ward'鏈接類型使用方差最小化策略來合并簇,這是凝聚層次聚類中最常用的方法之一。6.1.4結(jié)果分析層次聚類樹(也稱為樹狀圖)顯示了簇的合并過程。樹的每個分支點代表一次簇的合并,而分支點的高度則表示合并時的相似度或距離。6.22使用sklearn進(jìn)行層次聚類scikit-learn(簡稱sklearn)是另一個流行的Python機(jī)器學(xué)習(xí)庫,它也提供了層次聚類的實現(xiàn)。與SciPy不同,sklearn的層次聚類模塊sklearn.cluster.AgglomerativeClustering直接輸出聚類標(biāo)簽,而不是層次聚類樹。6.2.1數(shù)據(jù)準(zhǔn)備我們使用與6.1節(jié)相同的數(shù)據(jù)集。6.2.2凝聚層次聚類使用sklearn進(jìn)行凝聚層次聚類,我們首先需要創(chuàng)建一個AgglomerativeClustering對象,并指定鏈接類型和要形成的簇的數(shù)量。fromsklearn.clusterimportAgglomerativeClustering

#創(chuàng)建AgglomerativeClustering對象

cluster=AgglomerativeClustering(n_clusters=2,linkage='ward')

#擬合數(shù)據(jù)并獲取聚類標(biāo)簽

labels=cluster.fit_predict(data)6.2.3參數(shù)解釋AgglomerativeClustering(n_clusters=2,linkage='ward')中的n_clusters參數(shù)指定了最終的簇數(shù)量,linkage參數(shù)指定了鏈接類型。6.2.4結(jié)果分析fit_predict函數(shù)返回一個數(shù)組,其中每個元素表示對應(yīng)數(shù)據(jù)點的簇標(biāo)簽。通過這些標(biāo)簽,我們可以分析數(shù)據(jù)點是如何被分組的。6.33代碼示例與結(jié)果分析為了更深入地理解凝聚層次聚類,我們將同時使用SciPy和sklearn對同一數(shù)據(jù)集進(jìn)行聚類,并比較結(jié)果。importmatplotlib.pyplotasplt

fromscipy.cluster.hierarchyimportfcluster

#使用SciPy進(jìn)行凝聚層次聚類

Z=linkage(data,'ward')

clusters=fcluster(Z,2,criterion='maxclust')

#使用sklearn進(jìn)行凝聚層次聚類

cluster_sk=AgglomerativeClustering(n_clusters=2,linkage='ward')

labels_sk=cluster_sk.fit_predict(data)

#可視化結(jié)果

plt.figure(figsize=(10,5))

plt.subplot(1,2,1)

plt.scatter(data[:,0],data[:,1],c=clusters)

plt.title('SciPy凝聚層次聚類')

plt.subplot(1,2,2)

plt.scatter(data[:,0],data[:,1],c=labels_sk)

plt.title('sklearn凝聚層次聚類')

plt.show()6.3.1結(jié)果分析通過上述代碼,我們生成了兩個子圖,分別展示了使用SciPy和sklearn進(jìn)行凝聚層次聚類的結(jié)果。盡管兩者使用了相同的鏈接類型和簇數(shù)量,但由于實現(xiàn)細(xì)節(jié)的差異,它們的聚類結(jié)果可能不完全相同。然而,總體上,我們可以觀察到數(shù)據(jù)點被分為了兩個主要的簇,這與我們數(shù)據(jù)集的分布相吻合。通過比較SciPy和sklearn的聚類結(jié)果,我們可以更好地理解不同庫在實現(xiàn)同一算法時的差異,以及如何根據(jù)具體需求選擇合適的工具。7總結(jié)與進(jìn)一步研究方向7.11層次聚類算法的總結(jié)層次聚類是一種無監(jiān)督學(xué)習(xí)方法,它通過構(gòu)建一個樹狀的聚類結(jié)構(gòu)來對數(shù)據(jù)進(jìn)行分組。這種算法可以分為兩類:凝聚層次聚類和分裂層次聚類。在本教程中,我們主要探討了凝聚層次聚類,它從每個數(shù)據(jù)點作為一個獨立的聚類開始,然后逐步合并最相似的聚類,直到所有數(shù)據(jù)點被合并成一個大的聚類或達(dá)到某個停止條件。7.1.1凝聚層次聚類的關(guān)鍵步驟:初始化

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論