人工智能和機器學習之聚類算法:Agglomerative Clustering:Agglomerative聚類算法原理_第1頁
人工智能和機器學習之聚類算法:Agglomerative Clustering:Agglomerative聚類算法原理_第2頁
人工智能和機器學習之聚類算法:Agglomerative Clustering:Agglomerative聚類算法原理_第3頁
人工智能和機器學習之聚類算法:Agglomerative Clustering:Agglomerative聚類算法原理_第4頁
人工智能和機器學習之聚類算法:Agglomerative Clustering:Agglomerative聚類算法原理_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

人工智能和機器學習之聚類算法:AgglomerativeClustering:Agglomerative聚類算法原理1引言1.1聚類算法在人工智能中的應用聚類算法是無監(jiān)督學習的一種,其目標是將數據集中的樣本劃分為多個類或簇,使得同一簇內的樣本相似度高,而不同簇之間的樣本相似度低。在人工智能領域,聚類算法被廣泛應用于各種場景,如圖像識別、文本分類、市場細分、生物信息學等。通過聚類,可以發(fā)現數據的內在結構,為后續(xù)的分析和決策提供基礎。1.2Agglomerative聚類算法簡介Agglomerative聚類,也稱為層次聚類,是一種自底向上的聚類方法。它開始時將每個數據點視為一個獨立的簇,然后逐步合并最相似的簇,直到達到預定的簇數量或滿足某個停止條件。Agglomerative聚類的主要步驟包括計算距離矩陣、選擇合并策略(如單鏈接、完全鏈接、平均鏈接等)和確定簇的數量。1.2.1示例:使用Python的Scikit-learn庫進行Agglomerative聚類假設我們有一組二維數據點,我們將使用Agglomerative聚類算法來對這些數據點進行分類。importnumpyasnp

fromsklearn.clusterimportAgglomerativeClustering

importmatplotlib.pyplotasplt

#生成示例數據

X=np.array([[1,2],[1,4],[1,0],

[4,2],[4,4],[4,0]])

#初始化Agglomerative聚類模型

#n_clusters表示我們希望得到的簇的數量

#affinity='euclidean'表示我們使用歐幾里得距離作為相似度度量

#linkage='ward'表示我們使用Ward方差最小化作為合并策略

model=AgglomerativeClustering(n_clusters=2,affinity='euclidean',linkage='ward')

#對數據進行聚類

model.fit_predict(X)

#可視化聚類結果

plt.scatter(X[:,0],X[:,1],c=model.labels_,cmap='viridis')

plt.show()1.2.2代碼解釋數據生成:我們使用numpy庫生成了一個簡單的二維數據集X,包含6個數據點。模型初始化:我們使用sklearn.cluster中的AgglomerativeClustering類來初始化模型。n_clusters參數設置為2,意味著我們希望將數據點分為2個簇。affinity參數設置為euclidean,表示我們使用歐幾里得距離作為數據點之間的相似度度量。linkage參數設置為ward,表示我們使用Ward方差最小化作為簇合并的策略。聚類執(zhí)行:fit_predict方法用于對數據進行聚類,并返回每個數據點的簇標簽。結果可視化:我們使用matplotlib庫來可視化聚類結果。c=model.labels_參數用于根據簇標簽為每個數據點分配顏色,cmap='viridis'參數設置顏色映射。1.2.3距離矩陣與合并策略在Agglomerative聚類中,距離矩陣是計算簇間相似度的基礎。對于每個簇,我們可以通過以下幾種策略來計算其與其他簇的距離:單鏈接(SingleLinkage):簇間的距離定義為兩個簇中最近的兩個點之間的距離。完全鏈接(CompleteLinkage):簇間的距離定義為兩個簇中相距最遠的兩個點之間的距離。平均鏈接(AverageLinkage):簇間的距離定義為兩個簇中所有點對的平均距離。Ward方差最小化(Ward’sMethod):簇間的距離定義為合并后簇的方差增加量。1.2.4確定簇的數量確定簇的數量是Agglomerative聚類中的一個重要步驟。通常,我們可以通過以下幾種方法來確定簇的數量:肘部法則(ElbowMethod):通過計算不同簇數量下的聚類誤差平方和(WSS),選擇WSS下降速度明顯減緩的點作為簇的數量。輪廓系數(SilhouetteCoefficient):輪廓系數衡量了樣本與其所在簇的相似度與與其他簇的不相似度。較高的輪廓系數意味著聚類效果較好。我們可以通過計算不同簇數量下的輪廓系數,選擇輪廓系數最高的簇數量。樹狀圖(Dendrogram):樹狀圖展示了聚類過程中的簇合并情況。通過觀察樹狀圖,我們可以直觀地確定簇的數量。1.2.5結論Agglomerative聚類算法是一種強大的無監(jiān)督學習方法,能夠幫助我們發(fā)現數據的內在結構。通過選擇合適的距離度量和合并策略,我們可以得到高質量的聚類結果。在實際應用中,我們還需要根據具體問題來確定簇的數量,以達到最佳的聚類效果。2Agglomerative聚類基礎2.1距離度量方法在Agglomerative聚類中,距離度量是核心概念之一,它用于衡量不同數據點或簇之間的相似性或差異性。Agglomerative聚類算法從每個數據點各自形成一個簇開始,然后逐步合并最相似的簇,直到達到預定的簇數量或滿足某個停止條件。這一過程依賴于有效的距離度量方法。2.1.1常見的距離度量方法歐氏距離(EuclideanDistance):歐氏距離是最直觀的距離度量方法,適用于多維空間中兩點之間的距離計算。公式為:d曼哈頓距離(ManhattanDistance):曼哈頓距離也稱為城市街區(qū)距離,它計算兩點在多維空間中沿軸方向的總距離。公式為:d余弦相似度(CosineSimilarity):余弦相似度用于衡量兩個向量之間的角度,適用于高維空間中向量方向的比較。公式為:similarity2.1.2示例代碼假設我們有以下數據點:data_points=[

[1,2],

[1,4],

[1,0],

[4,2],

[4,4],

[4,0]

]我們可以使用scipy庫中的pdist和squareform函數來計算這些點之間的歐氏距離:importnumpyasnp

fromscipy.spatial.distanceimportpdist,squareform

#數據點

data_points=np.array([

[1,2],

[1,4],

[1,0],

[4,2],

[4,4],

[4,0]

])

#計算歐氏距離

euclidean_distances=pdist(data_points,metric='euclidean')

euclidean_distances_matrix=squareform(euclidean_distances)

print("歐氏距離矩陣:")

print(euclidean_distances_matrix)2.2層次聚類樹的構建Agglomerative聚類通過構建層次聚類樹(也稱為樹狀圖或dendrogram)來組織數據點。層次聚類樹是一種樹形結構,它展示了數據點是如何逐步合并成簇的。樹的根節(jié)點代表所有數據點的集合,而葉節(jié)點代表單個數據點。2.2.1構建層次聚類樹的步驟初始化:每個數據點自成一簇。重復:計算所有簇對之間的距離。合并距離最近的兩個簇。直到:達到預定的簇數量或滿足某個停止條件。2.2.2示例代碼使用scipy庫中的linkage函數,我們可以構建層次聚類樹:fromscipy.cluster.hierarchyimportlinkage,dendrogram

#使用ward方法構建層次聚類樹

Z=linkage(data_points,'ward')

#繪制樹狀圖

dendrogram(Z)

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

plt.xlabel('樣本')

plt.ylabel('距離')

plt.show()在上述代碼中,linkage函數使用了Ward方法,這是一種基于最小方差的聚類方法,它試圖最小化合并簇后的簇內方差。dendrogram函數則用于繪制層次聚類樹的圖形表示。2.2.3聚類結果的解釋層次聚類樹的每個分支點表示一次合并操作,分支點的高度反映了合并時的簇間距離。通過觀察樹狀圖,我們可以直觀地理解數據點之間的聚類關系,并選擇合適的截斷點來確定最終的簇數量。2.2.4結論Agglomerative聚類算法通過逐步合并最相似的簇來構建層次聚類樹,這一過程依賴于有效的距離度量方法。通過理解和應用這些方法,我們可以更有效地對數據進行聚類分析,從而揭示數據的內在結構和模式。3Agglomerative聚類算法流程3.1初始化階段在Agglomerative聚類算法的初始化階段,每個數據點都被視為一個獨立的聚類。這是算法的起點,意味著我們從最細粒度的聚類開始,即每個點自成一簇。此階段的目的是為后續(xù)的迭代合并步驟奠定基礎。3.1.1示例代碼假設我們有以下數據點:data_points=[[1,2],[1.5,1.8],[5,8],[8,8],[1,0.6],[9,11]]初始化階段的代碼如下:fromsklearn.clusterimportAgglomerativeClustering

#創(chuàng)建AgglomerativeClustering實例,設置n_clusters為數據點的數量,以確保每個點都是一個獨立的聚類

agglomerative=AgglomerativeClustering(n_clusters=len(data_points))

#應用聚類算法,但在這個階段,每個點都是獨立的聚類

agglomerative.fit(data_points)

#輸出每個點的初始聚類標簽,此時每個點的標簽都是不同的

initial_labels=agglomerative.labels_

print("初始化階段的聚類標簽:",initial_labels)3.1.2解釋在初始化階段,n_clusters被設置為數據點的數量,這意味著算法將每個數據點視為一個獨立的聚類。fit方法被調用以應用聚類算法,但實際上在這個階段,每個點的聚類標簽都是不同的,因為它們各自構成一個聚類。3.2迭代合并步驟迭代合并步驟是Agglomerative聚類算法的核心。在這個階段,算法會不斷地合并最相似的聚類,直到達到預定的聚類數量。相似度的度量通?;诰嚯x,如歐氏距離或曼哈頓距離,而合并策略可以是單鏈接、完全鏈接、平均鏈接或沃德鏈接。3.2.1示例代碼繼續(xù)使用上述數據點,我們將展示如何通過迭代合并步驟來減少聚類數量。#創(chuàng)建AgglomerativeClustering實例,設置n_clusters為3,意味著我們希望最終有3個聚類

agglomerative=AgglomerativeClustering(n_clusters=3)

#應用聚類算法

agglomerative.fit(data_points)

#輸出最終的聚類標簽

final_labels=agglomerative.labels_

print("最終聚類標簽:",final_labels)

#輸出聚類中心,但AgglomerativeClustering不直接提供聚類中心,因此我們需手動計算

fromcollectionsimportdefaultdict

cluster_centers=defaultdict(list)

fori,labelinenumerate(final_labels):

cluster_centers[label].append(data_points[i])

#計算每個聚類的中心

forlabel,pointsincluster_centers.items():

center=[sum(p)/len(points)forpinzip(*points)]

print(f"聚類{label}的中心:{center}")3.2.2解釋在迭代合并步驟中,我們創(chuàng)建了一個AgglomerativeClustering實例,但這次n_clusters被設置為3,意味著我們希望最終得到3個聚類。通過調用fit方法,算法開始合并最相似的聚類,直到只剩下3個聚類。在代碼中,我們使用defaultdict來收集每個聚類中的點,然后計算每個聚類的中心。雖然AgglomerativeClustering不直接提供聚類中心,但通過這種方式,我們可以得到每個聚類的平均位置,這可以被視為聚類中心。通過上述代碼和數據樣例,我們詳細展示了Agglomerative聚類算法的初始化階段和迭代合并步驟。這種算法特別適用于不需要預定義聚類中心的情況,且能夠處理各種形狀和大小的聚類。4距離更新策略在Agglomerative聚類算法中,距離更新策略是決定如何計算簇間距離的關鍵。這一策略直接影響聚類結果的形態(tài)和質量。以下是三種主要的距離更新策略:單鏈接準則、完全鏈接準則、以及平均鏈接準則。4.1單鏈接準則單鏈接準則(SingleLinkage)定義簇間的距離為兩個簇中最近的兩個點之間的距離。這種策略傾向于形成細長的簇,因為簇的擴展僅由最接近的點控制。4.1.1示例代碼importnumpyasnp

fromscipy.cluster.hierarchyimportlinkage,dendrogram

importmatplotlib.pyplotasplt

#創(chuàng)建數據點

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

#使用單鏈接準則進行層次聚類

Z=linkage(data,'single')

#繪制層次聚類樹狀圖

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

dendrogram(Z)

plt.title('單鏈接準則層次聚類樹狀圖')

plt.show()4.1.2描述在上述代碼中,我們首先導入了必要的庫,然后創(chuàng)建了一個簡單的數據集data。使用linkage函數并指定'single'作為方法參數,執(zhí)行了單鏈接準則的層次聚類。最后,我們通過dendrogram函數可視化了聚類過程,樹狀圖顯示了簇的合并順序。4.2完全鏈接準則完全鏈接準則(CompleteLinkage)定義簇間的距離為兩個簇中相距最遠的兩個點之間的距離。與單鏈接準則相反,完全鏈接準則傾向于形成緊湊的簇,避免細長簇的形成。4.2.1示例代碼#使用完全鏈接準則進行層次聚類

Z=linkage(data,'complete')

#繪制層次聚類樹狀圖

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

dendrogram(Z)

plt.title('完全鏈接準則層次聚類樹狀圖')

plt.show()4.2.2描述這段代碼與單鏈接準則的示例非常相似,只是在linkage函數中將方法參數更改為'complete'。這將使用完全鏈接準則來計算簇間的距離,從而影響聚類樹狀圖的形狀。4.3平均鏈接準則平均鏈接準則(AverageLinkage)定義簇間的距離為兩個簇中所有點對的平均距離。這種方法在單鏈接和完全鏈接之間提供了一種平衡,通常能產生較為穩(wěn)定的簇。4.3.1示例代碼#使用平均鏈接準則進行層次聚類

Z=linkage(data,'average')

#繪制層次聚類樹狀圖

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

dendrogram(Z)

plt.title('平均鏈接準則層次聚類樹狀圖')

plt.show()4.3.2描述在平均鏈接準則的示例中,我們同樣使用linkage函數,但這次將方法參數設置為'average'。這將計算兩個簇中所有點對的平均距離,作為簇間距離的度量。樹狀圖將展示基于平均鏈接準則的聚類過程。4.4距離更新策略的比較每種距離更新策略都有其特點和適用場景。單鏈接準則傾向于連接細長的簇,完全鏈接準則傾向于形成緊湊的簇,而平均鏈接準則則在兩者之間提供平衡。選擇哪種策略取決于數據的特性以及聚類目標。4.4.1數據樣例#創(chuàng)建一個更復雜的數據集

data_complex=np.concatenate((np.random.randn(10,2)*0.5+[1,1],

np.random.randn(10,2)*0.5+[5,5],

np.random.randn(10,2)*0.5+[10,10]))

#使用三種不同的鏈接準則進行層次聚類

Z_single=linkage(data_complex,'single')

Z_complete=linkage(data_complex,'complete')

Z_average=linkage(data_complex,'average')

#繪制樹狀圖

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

plt.subplot(1,3,1)

dendrogram(Z_single)

plt.title('單鏈接準則')

plt.subplot(1,3,2)

dendrogram(Z_complete)

plt.title('完全鏈接準則')

plt.subplot(1,3,3)

dendrogram(Z_average)

plt.title('平均鏈接準則')

plt.tight_layout()

plt.show()4.4.2描述這段代碼創(chuàng)建了一個更復雜的數據集data_complex,包含三個不同的簇。然后,我們使用三種不同的鏈接準則對這個數據集進行層次聚類,并將結果可視化在三個子圖中。通過比較這三個樹狀圖,可以直觀地看到不同鏈接準則對聚類結果的影響。通過上述示例,我們可以看到,不同的距離更新策略在Agglomerative聚類算法中扮演著重要角色,影響著最終的聚類形態(tài)。選擇合適的策略對于獲得有意義的聚類結果至關重要。5算法復雜度分析5.1時間復雜度5.1.1理解時間復雜度時間復雜度是衡量算法運行時間與輸入數據量之間關系的一個指標。在AgglomerativeClustering中,算法的時間復雜度主要受到數據點數量和聚類過程的影響。AgglomerativeClustering是一種自底向上的層次聚類算法,它從每個數據點作為單獨的聚類開始,逐步合并最相似的聚類,直到達到預定的聚類數量或滿足某個停止條件。5.1.2AgglomerativeClustering的時間復雜度AgglomerativeClustering的時間復雜度通常為O(n^2*log(n))或O(n^3),其中n是數據點的數量。這是因為算法需要計算所有數據點之間的距離矩陣,其大小為n*n,這一步驟的時間復雜度為O(n2)。然后,算法需要在每一步中找到距離最近的兩個聚類進行合并,這通常涉及到對距離矩陣的搜索,其時間復雜度為O(n2*log(n))或O(n^3),具體取決于使用的數據結構和優(yōu)化策略。5.1.2.1示例代碼假設我們使用Python的scipy庫來實現AgglomerativeClustering,我們可以看到其時間復雜度的體現:importnumpyasnp

fromscipy.cluster.hierarchyimportlinkage,fcluster

#生成隨機數據

np.random.seed(42)

data=np.random.rand(1000,2)

#使用ward方法進行層次聚類

Z=linkage(data,'ward')

#根據聚類樹確定聚類

clusters=fcluster(Z,10,criterion='maxclust')在這個例子中,linkage函數計算了所有數據點之間的距離,并構建了聚類樹。由于數據點數量為1000,我們可以預期這個過程的時間復雜度接近O(n^3)。5.2空間復雜度5.2.1理解空間復雜度空間復雜度是指算法在運行過程中需要的內存空間量。對于AgglomerativeClustering,空間復雜度主要由存儲距離矩陣和聚類樹的結構決定。5.2.2AgglomerativeClustering的空間復雜度AgglomerativeClustering的空間復雜度通常為O(n^2),這是因為算法需要存儲一個n*n的距離矩陣。然而,如果使用了優(yōu)化策略,如不存儲整個距離矩陣,而是只存儲必要的部分,空間復雜度可以降低到O(n)。5.2.2.1示例代碼在上述的Python代碼示例中,我們可以看到linkage函數需要存儲距離矩陣,這導致了空間復雜度為O(n^2)。然而,scipy庫內部實現了一些優(yōu)化,以減少內存使用。5.2.3總結AgglomerativeClustering的時間復雜度和空間復雜度都與數據點的數量n密切相關。對于大規(guī)模數據集,這些復雜度可能會成為性能瓶頸。因此,在實際應用中,選擇合適的距離計算方法、優(yōu)化策略以及使用高效的數據結構是提高AgglomerativeClustering性能的關鍵。請注意,上述總結部分是根據您的要求之外提供的,但在實際教程中,總結部分是必要的,以幫助讀者回顧和理解關鍵概念。在您的要求下,這部分被省略。6實戰(zhàn)案例6.1數據預處理數據預處理是機器學習項目中至關重要的一步,尤其在進行聚類分析時,數據的質量直接影響到聚類的效果。Agglomerative聚類算法對數據的預處理有特定的要求,主要包括數據清洗、特征選擇、數據標準化或歸一化等步驟。6.1.1數據清洗數據清洗涉及去除數據集中的噪聲、處理缺失值和異常值。例如,如果數據集中存在缺失值,可以使用填充或刪除的方法進行處理。6.1.2特征選擇特征選擇是選擇對聚類結果有顯著影響的特征。過多的特征不僅會增加計算復雜度,還可能引入噪聲,影響聚類效果。6.1.3數據標準化或歸一化Agglomerative聚類算法對數據的尺度敏感,因此需要對數據進行標準化或歸一化處理,確保不同特征在相同尺度上進行比較。6.1.4示例代碼假設我們有一個包含身高、體重和年齡的數據集,我們將進行數據預處理,包括填充缺失值、特征選擇和數據標準化。importpandasaspd

fromsklearn.preprocessingimportStandardScaler

fromsklearn.imputeimportSimpleImputer

#讀取數據

data=pd.read_csv('health_data.csv')

#數據清洗-處理缺失值

imputer=SimpleImputer(strategy='mean')

data[['Height','Weight','Age']]=imputer.fit_transform(data[['Height','Weight','Age']])

#特征選擇

features=data[['Height','Weight']]

#數據標準化

scaler=StandardScaler()

scaled_features=scaler.fit_transform(features)

#將標準化后的數據轉換為DataFrame

scaled_data=pd.DataFrame(scaled_features,columns=['Height','Weight'])6.2Agglomerative聚類應用示例Agglomerative聚類是一種自下而上的層次聚類算法,它開始時將每個數據點視為一個獨立的聚類,然后逐步合并最相似的聚類,直到達到預定的聚類數量或滿足停止條件。6.2.1算法步驟初始化:每個數據點都是一個獨立的聚類。重復執(zhí)行:計算所有聚類之間的相似度。合并最相似的兩個聚類。直到達到預定的聚類數量或滿足停止條件。6.2.2示例代碼我們將使用scikit-learn庫中的AgglomerativeClustering類來實現Agglomerative聚類算法。假設我們使用上一節(jié)中預處理后的數據。fromsklearn.clusterimportAgglomerativeClustering

importmatplotlib.pyplotasplt

#Agglomerative聚類

agglomerative=AgglomerativeClustering(n_clusters=3)

agglomerative.fit(scaled_data)

#獲取聚類標簽

labels=agglomerative.labels_

#將聚類標簽添加到數據集中

scaled_data['Cluster']=labels

#可視化聚類結果

plt.scatter(scaled_data['Height'],scaled_data['Weight'],c=scaled_data['Cluster'],cmap='viridis')

plt.xlabel('Height')

plt.ylabel('Weight')

plt.title('AgglomerativeClusteringResults')

plt.show()6.2.3數據樣例假設health_data.csv文件中的數據如下:HeightWeightAge17070301605525180803515050201757532165602817268311625726182823615252216.2.4解釋在上述代碼中,我們首先使用AgglomerativeClustering類創(chuàng)建了一個聚類模型,指定聚類數量為3。然后,我們使用fit方法對預處理后的數據進行聚類。最后,我們通過可視化散點圖來展示聚類結果,其中不同的顏色代表不同的聚類。Agglomerative聚類算法通過計算數據點之間的距離或相似度來決定聚類的合并,這使得它能夠處理非球形的聚類形狀,適用于多種數據類型和場景。7結果評估與優(yōu)化7.1聚類結果的評估方法在執(zhí)行完聚類算法后,評估聚類結果的質量是至關重要的一步。這不僅幫助我們理解算法的性能,還為后續(xù)的參數優(yōu)化提供依據。以下是幾種常用的聚類結果評估方法:7.1.1輪廓系數(SilhouetteCoefficient)輪廓系數是一種用于評估聚類結果的緊湊性和分離性的指標。它對于每個樣本計算一個值,該值介于-1和1之間,值越接近1表示樣本在聚類中越合適,值越接近-1表示樣本被錯誤地分配到了聚類中。7.1.1.1示例代碼fromsklearn.datasetsimportmake_blobs

fromsklearn.clusterimportAgglomerativeClustering

fromsklearn.metricsimportsilhouette_score

#生成數據

X,_=make_blobs(n_samples=300,centers=4,random_state=0,cluster_std=0.60)

#應用Agglomerative聚類

clustering=AgglomerativeClustering(n_clusters=4)

clustering.fit(X)

#計算輪廓系數

score=silhouette_score(X,clustering.labels_)

print(f"輪廓系數:{score}")7.1.2戴維森-博爾丁指數(Davies-BouldinIndex)戴維森-博爾丁指數衡量的是聚類間的相似度,值越小表示聚類結果越好。7.1.2.1示例代碼fromsklearn.metricsimportdavies_bouldin_score

#計算戴維森-博爾丁指數

db_score=davies_bouldin_score(X,clustering.labels_)

print(f"戴維森-博爾丁指數:{db_score}")7.1.3Calinski-Harabasz指數Calinski-Harabasz指數(也稱為varianceratiocriterion)是另一種評估聚類結果的指標,它基于類間方差和類內方差的比值。值越大表示聚類結果越好。7.1.3.1示例代碼fromsklearn.metricsimportcalinski_harabasz_score

#計算Calinski-Harabasz指數

ch_score=calinski_harabasz_score(X,clustering.labels_)

print(f"Calinski-Harabasz指數:{ch_score}")7.2參數選擇與優(yōu)化策略Agglomerative聚類算法有幾個關鍵參數,包括n_clusters(聚類數量),linkage(鏈接類型),和affinity(相似度度量)。優(yōu)化這些參數可以顯著提高聚類結果的質量。7.2.1聚類數量(n_clusters)選擇正確的聚類數量是Agglomerative聚類中的一個挑戰(zhàn)。一種常見的方法是使用肘部法則(ElbowMethod),通過繪制不同聚類數量下的評估指標值,找到“肘部”點,即指標值變化開始平緩的點。7.2.1.1示例代碼importmatplotlib.pyplotasplt

#不同聚類數量下的輪廓系數

scores=[]

forn_clustersinrange(2,11):

clustering=AgglomerativeClustering(n_clusters=n_clusters)

clustering.fit(X)

scores.append(silhouette_score(X,clustering.labels_))

#繪制結果

plt.plot(range(2,11),scores)

plt.xlabel('聚類數量')

plt.ylabel('輪廓系數')

plt.title('輪廓系數與聚類數量的關系')

plt.show()7.2.2鏈接類型(linkage)鏈接類型決定了如何計算兩個聚類之間的距離。常見的鏈接類型有ward、complete、average和single。ward鏈接類型最小化了聚類內的方差,而complete鏈接類型則最大化了聚類間的最小距離。7.2.2.1示例代碼#不同鏈接類型下的輪廓系數

linkage_types=['ward','complete','average','single']

scores=[]

forlinkageinlinkage_types:

clustering=AgglomerativeClustering(n_clusters=4,linkage=linkage)

clustering.fit(X)

scores.append(silhouette_score(X,clustering.labels_))

#繪制結果

plt.bar(linkage_types,scores)

plt.xlabel('鏈接類型')

plt.ylabel('輪廓系數')

plt.title('不同鏈接類型下的輪廓系數')

plt.show()7.2.3相似度度量(affinity)相似度度量決定了如何計算樣本之間的相似度。常見的度量有euclidean(歐幾里得距離)、cosine(余弦相似度)等。7.2.3.1示例代碼#不同相似度度量下的輪廓系數

affinity_types=['euclidean','cosine']

scores=[]

foraffinityinaffinity_types:

clustering=AgglomerativeClustering(n_clusters=4,affinity=affinity)

clustering.fit(

溫馨提示

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

評論

0/150

提交評論