Python机器学习——Agglomerative层次聚类
層次聚類(hierarchical clustering)可在不同層次上對(duì)數(shù)據(jù)集進(jìn)行劃分,形成樹(shù)狀的聚類結(jié)構(gòu)。AggregativeClustering是一種常用的層次聚類算法。?
??其原理是:最初將每個(gè)對(duì)象看成一個(gè)簇,然后將這些簇根據(jù)某種規(guī)則被一步步合并,就這樣不斷合并直到達(dá)到預(yù)設(shè)的簇類個(gè)數(shù)。這里的關(guān)鍵在于:如何計(jì)算聚類簇之間的距離??
??由于每個(gè)簇就是一個(gè)集合,因此需要給出集合之間的距離。給定聚類簇Ci,CjCi,Cj,有如下三種距離:
?
Python實(shí)戰(zhàn)
??AgglomerativeClustering是scikit-learn提供的層級(jí)聚類算法模型,其原型為:
class sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=’euclidean’, memory=None, connectivity=None, compute_full_tree=’auto’, linkage=’ward’, pooling_func=<function mean>)
參數(shù)
n_clusters:一個(gè)整數(shù),指定分類簇的數(shù)量
connectivity:一個(gè)數(shù)組或者可調(diào)用對(duì)象或者None,用于指定連接矩陣
affinity:一個(gè)字符串或者可調(diào)用對(duì)象,用于計(jì)算距離。可以為:’euclidean’,’l1’,’l2’,’mantattan’,’cosine’,’precomputed’,如果linkage=’ward’,則affinity必須為’euclidean’
memory:用于緩存輸出的結(jié)果,默認(rèn)為不緩存
n_components:在 v-0.18中移除
compute_full_tree:通常當(dāng)訓(xùn)練了n_clusters后,訓(xùn)練過(guò)程就會(huì)停止,但是如果compute_full_tree=True,則會(huì)繼續(xù)訓(xùn)練從而生成一顆完整的樹(shù)
linkage:一個(gè)字符串,用于指定鏈接算法?
‘ward’:單鏈接single-linkage,采用dmindmin
‘complete’:全鏈接complete-linkage算法,采用dmaxdmax
‘a(chǎn)verage’:均連接average-linkage算法,采用davgdavg
pooling_func:一個(gè)可調(diào)用對(duì)象,它的輸入是一組特征的值,輸出是一個(gè)數(shù)
?
屬性
labels:每個(gè)樣本的簇標(biāo)記
n_leaves_:分層樹(shù)的葉節(jié)點(diǎn)數(shù)量
n_components:連接圖中連通分量的估計(jì)值
children:一個(gè)數(shù)組,給出了每個(gè)非節(jié)點(diǎn)數(shù)量
方法
fit(X[,y]):訓(xùn)練樣本
fit_predict(X[,y]):訓(xùn)練模型并預(yù)測(cè)每個(gè)樣本的簇標(biāo)記
?
?
?
?
可以看到當(dāng)n_clusters=4時(shí),ARI指數(shù)最大,因?yàn)榇_實(shí)是從四個(gè)中心點(diǎn)產(chǎn)生的四個(gè)簇。
?可以看到,三種鏈接方式隨分類簇的數(shù)量的總體趨勢(shì)相差無(wú)幾。但是單鏈接方式ward的峰值最大,且峰值最大的分類簇的數(shù)量剛好等于實(shí)際生成的簇的數(shù)量。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Python机器学习——Agglomerative层次聚类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python机器学习——DBSCAN聚类
- 下一篇: __new__ __init__区别