日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sklearn聚类方法详解

發(fā)布時(shí)間:2024/3/24 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn聚类方法详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 KMeans

1.1 算法描述

  • 隨機(jī)選擇k個(gè)中心
  • 遍歷所有樣本,把樣本劃分到距離最近的一個(gè)中心
  • 劃分之后就有K個(gè)簇,計(jì)算每個(gè)簇的平均值作為新的質(zhì)心
  • 重復(fù)步驟2,直到達(dá)到停止條件
  • 停止條件:

    聚類中心不再發(fā)生變化;所有的距離最小;迭代次數(shù)達(dá)到設(shè)定值,

    代價(jià)函數(shù):誤差平方和(SSE)

    1.2 算法優(yōu)缺點(diǎn)

    優(yōu)點(diǎn):

    • 算法容易理解,聚類效果不錯(cuò)
    • 具有出色的速度
    • 當(dāng)簇近似高斯分布時(shí),效果比較好

    缺點(diǎn):

    • 需要自己確定K值,k值的選定是比較難確定
    • 對(duì)初始中心點(diǎn)敏感
    • 不適合發(fā)現(xiàn)非凸形狀的簇或者大小差別較大的簇
    • 特殊值/離群值對(duì)模型的影響比較大
    • ?從數(shù)據(jù)先驗(yàn)的角度來(lái)說(shuō),在 Kmeans 中,我們假設(shè)各個(gè) cluster 的先驗(yàn)概率是一樣的,但是各個(gè) cluster 的數(shù)據(jù)量可能是不均勻的。舉個(gè)例子,cluster A 中包含了10000個(gè)樣本,cluster B 中只包含了100個(gè)。那么對(duì)于一個(gè)新的樣本,在不考慮其與A cluster、 B cluster 相似度的情況,其屬于 cluster A 的概率肯定是要大于 cluster B的。

    1.3 效果評(píng)價(jià)

    從簇內(nèi)的稠密程度和簇間的離散程度來(lái)評(píng)估聚類的效果。

    常見(jiàn)的方法有輪廓系數(shù)Silhouette Coefficient和Calinski-Harabasz Index

    1.3.1 輪廓系數(shù)

    輪廓系數(shù)(Silhouette Coefficient)結(jié)合了聚類的凝聚度(Cohesion)和分離度(Separation),用于評(píng)估聚類的效果。該值處于-1~1之間,值越大,表示聚類效果越好。具體計(jì)算方法如下:

  • 對(duì)于第i個(gè)元素x_i,計(jì)算x_i與其同一個(gè)簇內(nèi)的所有其他元素距離的平均值,記作a_i,用于量化簇內(nèi)的凝聚度。
  • 選取x_i外的一個(gè)簇b,計(jì)算x_i與b中所有點(diǎn)的平均距離,遍歷所有其他簇,找到最近的這個(gè)平均距離,記作b_i,用于量化簇之間分離度。
  • 對(duì)于元素x_i,輪廓系數(shù)s_i = (b_i – a_i)/max(a_i,b_i)
  • 計(jì)算所有x的輪廓系數(shù),求出平均值即為當(dāng)前聚類的整體輪廓系數(shù)
  • 先是計(jì)算每一個(gè)樣本的輪廓系數(shù),然后計(jì)算所有樣本的輪廓系數(shù),求平均值作為整體輪廓系數(shù)

    從上面的公式,不難發(fā)現(xiàn)若s_i小于0,a_i ?> b_i, 說(shuō)明x_i與其簇內(nèi)元素的平均距離大于最近的其他簇,表示聚類效果不好。如果a_i趨于0,或者b_i足夠大,那么s_i趨近與1,說(shuō)明聚類效果比較好。

    相關(guān)代碼:

    import numpy as np from sklearn.cluster import KMeans kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X) labels = kmeans_model.labels_ metrics.silhouette_score(X, labels, metric='euclidean')

    1.3.2 Calinski-Harabasz Index

    這個(gè)不知道怎么翻譯,估計(jì)是兩個(gè)人名。

    類別內(nèi)部數(shù)據(jù)的協(xié)方差越小越好,類別之間的協(xié)方差越大越好,這樣的Calinski-Harabasz分?jǐn)?shù)會(huì)高。?
    在scikit-learn中, Calinski-Harabasz Index對(duì)應(yīng)的方法是metrics.calinski_harabaz_score。

    import numpy as np from sklearn.cluster import KMeans kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X) labels = kmeans_model.labels_ metrics.calinski_harabaz_score(X, labels)

    參考博客:KMeans

    1.4 K值確定

    • 結(jié)合業(yè)務(wù)分析,確定需要分類的個(gè)數(shù),這種情況往往有業(yè)務(wù)上聚類的個(gè)數(shù)范圍
    • 手肘原則,選定不同的K值,計(jì)算每個(gè)k值時(shí)的代價(jià)函數(shù)。Kmeans聚類的效果評(píng)估方法是SSE,是計(jì)算所有點(diǎn)到相應(yīng)簇中心的距離均值,當(dāng)然,k值越大?SSE越小,我們就是要求出隨著k值的變化SSE的變化規(guī)律,找到SSE減幅最小的k值,這時(shí)k應(yīng)該是相對(duì)比較合理的值。

    如圖,在k=3之后,代價(jià)函數(shù)變化緩慢,選擇聚類的個(gè)數(shù)為3

    ?

    2 DBSCAN

    ? ? DBSCAN(Density-Based Spatial Clustering of Application with Noise)基于密度的空間聚類算法。

    兩個(gè)參數(shù):

    ?

    • Eps鄰域半徑(epsilon,小量,小的值)
    • MinPts(minimum number of points required to form a cluster)定義核心點(diǎn)時(shí)的閾值。

    3個(gè)點(diǎn)

    ?

    • 核心點(diǎn):對(duì)應(yīng)稠密區(qū)域內(nèi)部的點(diǎn)
    • 邊界點(diǎn):對(duì)應(yīng)稠密區(qū)域邊緣的點(diǎn)
    • 噪音點(diǎn):對(duì)應(yīng)稀疏區(qū)域中的點(diǎn)

    ?

    上圖紅色為核心點(diǎn),黃色為邊界點(diǎn),藍(lán)色為噪音點(diǎn)

    ????

    幾個(gè)概念:

    • 核心對(duì)象:對(duì)于任一樣本點(diǎn),如果其Eps鄰域內(nèi)至少包含MinPts個(gè)樣本點(diǎn),那么這個(gè)樣本點(diǎn)就是核心對(duì)象。(一個(gè)點(diǎn))
    • 直接密度可達(dá):如果一個(gè)樣本點(diǎn)p處于一個(gè)核心對(duì)象q的Eps鄰域內(nèi),則稱該樣本點(diǎn)p從對(duì)象q出發(fā)時(shí)是直接密度可達(dá)的。
    • 密度相連:對(duì)于樣本點(diǎn)p和q,如果存在核心對(duì)象m,使得p、p均由m直接密度可達(dá),則稱p和q密度相連。

    DBSCAN的聚類是一個(gè)不斷生長(zhǎng)的過(guò)程。先找到一個(gè)核心對(duì)象,從整個(gè)核心對(duì)象出發(fā),找出它的直接密度可達(dá)的對(duì)象,再?gòu)倪@些對(duì)象出發(fā),尋找它們直接密度可達(dá)的對(duì)象,一直重復(fù)這個(gè)過(guò)程,直至最后沒(méi)有可尋找的對(duì)象了,那么一個(gè)簇的更新就完成了。也可以認(rèn)為,簇是所有密度可達(dá)的點(diǎn)的集合。

    ????DBSCAN核心思想:從某個(gè)選定的核心點(diǎn)出發(fā),不斷向密度可達(dá)的區(qū)域擴(kuò)張,從而得到一個(gè)包含核心點(diǎn)和邊界點(diǎn)的最大化區(qū)域,區(qū)域中任意兩點(diǎn)密度相連。

    優(yōu)點(diǎn):

    ?

    • 不需要指定cluster的數(shù)目
    • 聚類的形狀可以是任意的
    • 能找出數(shù)據(jù)中的噪音,對(duì)噪音不敏感
    • 算法應(yīng)用參數(shù)少,只需要兩個(gè)
    • 聚類結(jié)果幾乎不依賴于節(jié)點(diǎn)的遍歷順序

    缺點(diǎn):

    ?

    • 如果樣本集較大時(shí),聚類收斂時(shí)間較長(zhǎng),此時(shí)可以對(duì)搜索最近鄰時(shí)建立的KD樹(shù)或者球樹(shù)進(jìn)行規(guī)模限制來(lái)改進(jìn)
    • DBSCAN算法的聚類效果依賴于距離公式的選取,實(shí)際中常用的距離是歐幾里得距離,由于‘維數(shù)災(zāi)難’,距離的度量標(biāo)準(zhǔn)已變得不再重要。(分類器的性能隨著特征數(shù)量的增加而不斷提升,但過(guò)了某一值后,性能不升反而下降,這種現(xiàn)象稱為維數(shù)災(zāi)難。對(duì)于維度災(zāi)難的理解:維度災(zāi)難的理解)
    • 不適合數(shù)據(jù)集中密度差異很大的情形,因?yàn)檫@種情形,參數(shù)Eps,MinPts不好選擇。(個(gè)人理解,如果是密度大的,你選一個(gè)小的鄰域半徑就可以把這些數(shù)據(jù)點(diǎn)聚類,但對(duì)于那些密度小的數(shù)據(jù)點(diǎn),你設(shè)置的小的鄰域半徑,并不能把密度小的這些點(diǎn)給全部聚類。)

    聚類形狀可以是任意的,來(lái)個(gè)圖直觀感覺(jué)一下:

    在sklearn中的應(yīng)用

    from sklearn.cluster import DBSCAN DBSCAN(eps=0.5, # 鄰域半徑 min_samples=5, # 最小樣本點(diǎn)數(shù),MinPts metric='euclidean', metric_params=None, algorithm='auto', # 'auto','ball_tree','kd_tree','brute',4個(gè)可選的參數(shù) 尋找最近鄰點(diǎn)的算法,例如直接密度可達(dá)的點(diǎn) leaf_size=30, # balltree,cdtree的參數(shù) p=None, # n_jobs=1)

    ?

    3 OPTICS

    ? ? 是基于密度的聚類算法,OPTICS(Ordering Point To Idenfy the Cluster Structure),不顯式地生成數(shù)據(jù)聚類,只是對(duì)數(shù)據(jù)對(duì)象集合中的對(duì)象進(jìn)行排序,得到一個(gè)有序的對(duì)象列表。

    ?

    • 核心距離(core-distance)

    ? ? 給定參數(shù)eps,MinPts,使得某個(gè)樣本點(diǎn)成為核心對(duì)象(核心點(diǎn))的最小鄰域半徑,這個(gè)最小鄰域半徑為該樣本點(diǎn)的核心距離。

    在DBSCAN中,給定領(lǐng)域半徑eps和MinPts可以確定一個(gè)核心對(duì)象,如果eps比較大,在核心對(duì)象的鄰域半徑eps內(nèi)的點(diǎn)的總數(shù)就會(huì)大于你所設(shè)定的MinPts,所以核心距離就是一個(gè)核心點(diǎn)在滿足MinPts時(shí)的一個(gè)最小鄰域半徑。

    ?

    • 可達(dá)距離(reachability-distance)

    rd(y,x)表示使得‘x為核心點(diǎn)’且‘y從x直接密度可達(dá)’同時(shí)成立的最小鄰域半徑。

    ?

    參考資料

    https://blog.csdn.net/itplus/article/details/10089323

    4?Spectral Clustering 譜聚類

    ? ? ?1)概述

    ? ? ?Spectral Clustering(SC,即譜聚類),是一種基于圖論的聚類方法,它能夠識(shí)別任意形狀的樣本空間且收斂于全局最有解,其基本思想是利用樣本數(shù)據(jù)的相似矩陣進(jìn)行特征分解后得到的特征向量進(jìn)行聚類.它與樣本特征無(wú)關(guān)而只與樣本個(gè)數(shù)有關(guān)。

    ? ? ?基本思路:將樣本看作頂點(diǎn),樣本間的相似度看作帶權(quán)的邊,從而將聚類問(wèn)題轉(zhuǎn)為圖分割問(wèn)題:找到一種圖分割的方法使得連接不同組的邊的權(quán)重盡可能低(這意味著組間相似度要盡可能低),組內(nèi)的邊的權(quán)重盡可能高(這意味著組內(nèi)相似度要盡可能高).

    ? ? ?2)圖解過(guò)程

    ? ? ?

    ? ? ? ? ? ? ? ? ? ? ? ? 圖5

    ? ? ? ? ? 如上圖所示,斷開(kāi)虛線,六個(gè)數(shù)據(jù)被聚成兩類。

    ? ? ?3)Spectral Clustering算法函數(shù)

    ? ? ? ? ?a)核心函數(shù):sklearn.cluster.SpectralClustering

    ? ? ? ? ? ? ?因?yàn)槭腔趫D論的算法,所以輸入必須是對(duì)稱矩陣。

    ? ? ? ? b)主要參數(shù)(參數(shù)較多,詳細(xì)參數(shù))

    ? ? ? ? ? ? ?n_clusters:聚類的個(gè)數(shù)。(官方的解釋:投影子空間的維度)

    ? ? ? ? ? ? ?affinity:核函數(shù),默認(rèn)是'rbf',可選:"nearest_neighbors","precomputed","rbf"或sklearn.metrics.pairwise_kernels支持的其中一個(gè)內(nèi)核之一。

    ? ? ? ? ? ? ?gamma :affinity指定的核函數(shù)的內(nèi)核系數(shù),默認(rèn)1.0

    ? ? ? ? c)主要屬性

    ? ? ? ? ? ??labels_ :每個(gè)數(shù)據(jù)的分類標(biāo)簽

    5?Hierarchical Clustering 層次聚類

    1)概述

    ? ? ?Hierarchical Clustering(層次聚類):就是按照某種方法進(jìn)行層次分類,直到滿足某種條件為止。

    ? ? ?主要分成兩類:

    ? ? ? ? ? a)凝聚:從下到上。首先將每個(gè)對(duì)象作為一個(gè)簇,然后合并這些原子簇為越來(lái)越大的簇,直到所有的對(duì)象都在一個(gè)簇中,或者某個(gè)終結(jié)條件被滿足。

    ? ? ? ? ? b)分裂:從上到下。首先將所有對(duì)象置于同一個(gè)簇中,然后逐漸細(xì)分為越來(lái)越小的簇,直到每個(gè)對(duì)象自成一簇,或者達(dá)到了某個(gè)終止條件。(較少用)

    ? ? ?2)算法步驟

    ? ? ? ? ??a)將每個(gè)對(duì)象歸為一類, 共得到N類, 每類僅包含一個(gè)對(duì)象. 類與類之間的距離就是它們所包含的對(duì)象之間的距離.

    ? ? ? ? ? b)找到最接近的兩個(gè)類并合并成一類, 于是總的類數(shù)少了一個(gè).

    ? ? ? ? ??c)重新計(jì)算新的類與所有舊類之間的距離.
    ? ? ? ? ??d)重復(fù)第2步和第3步, 直到最后合并成一個(gè)類為止(此類包含了N個(gè)對(duì)象).

    ? ? ? 3)圖解過(guò)程

    ? ? ? ? ?

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖6

    ? ? ? ? ?4)Hierarchical Clustering算法函數(shù)

    ? ? ? ? ? ? ?a)sklearn.cluster.AgglomerativeClustering

    ? ? ? ? ? ? ?b)主要參數(shù)(詳細(xì)參數(shù))

    ? ? ? ? ? ? ? ? ?n_clusters:聚類的個(gè)數(shù)

    ? ? ? ? ? ? ? ? ?linkage:指定層次聚類判斷相似度的方法,有以下三種:

    ? ? ? ? ? ? ? ? ? ? ? ? ? ward:組間距離等于兩類對(duì)象之間的最小距離。(即single-linkage聚類)

    ? ? ? ? ? ? ? ? ? ? ? ? ??average:組間距離等于兩組對(duì)象之間的平均距離。(average-linkage聚類)

    ? ? ? ? ? ? ? ? ? ? ? ? ??complete:組間距離等于兩組對(duì)象之間的最大距離。(complete-linkage聚類)

    ? ? ? ? ? ? ? c)主要屬性

    ? ? ? ? ? ? ? ? ??labels_: 每個(gè)數(shù)據(jù)的分類標(biāo)簽

    參考資料?聚類算法

    6?Mean-shift 均值遷移

    1)概述

    ? ? ? ?Mean-shift(即:均值遷移)的基本思想:在數(shù)據(jù)集中選定一個(gè)點(diǎn),然后以這個(gè)點(diǎn)為圓心,r為半徑,畫(huà)一個(gè)圓(二維下是圓),求出這個(gè)點(diǎn)到所有點(diǎn)的向量的平均值,而圓心與向量均值的和為新的圓心,然后迭代此過(guò)程,直到滿足一點(diǎn)的條件結(jié)束。(Fukunage在1975年提出)

    ? ? ? 后來(lái)Yizong?Cheng 在此基礎(chǔ)上加入了 核函數(shù) 和 權(quán)重系數(shù) ,使得Mean-shift 算法開(kāi)始流行起來(lái)。目前它在聚類、圖像平滑、分割、跟蹤等方面有著廣泛的應(yīng)用。

    ? ? 2)圖解過(guò)程

    ? ? ? ?為了方便大家理解,借用下幾張圖來(lái)說(shuō)明Mean-shift的基本過(guò)程。

    ? ? ? ?

    ? ? ? ? 由上圖可以很容易看到,Mean-shift 算法的核心思想就是不斷的尋找新的圓心坐標(biāo),直到密度最大的區(qū)域。

    ? ? 3)Mean-shift 算法函數(shù)

    ? ? ? ?a)核心函數(shù):sklearn.cluster.MeanShift(核函數(shù):RBF核函數(shù))

    ? ? ? ? ? ?由上圖可知,圓心(或種子)的確定和半徑(或帶寬)的選擇,是影響算法效率的兩個(gè)主要因素。所以在sklearn.cluster.MeanShift中重點(diǎn)說(shuō)明了這兩個(gè)參數(shù)的設(shè)定問(wèn)題。

    ? ? ? ?b)主要參數(shù)

    ? ? ? ? ? ?bandwidth :半徑(或帶寬),float型。如果沒(méi)有給出,則使用sklearn.cluster.estimate_bandwidth計(jì)算出半徑(帶寬).(可選)

    ? ? ? ? ? ?seeds :圓心(或種子),數(shù)組類型,即初始化的圓心。(可選)

    ? ? ? ? ? ?bin_seeding :布爾值。如果為真,初始內(nèi)核位置不是所有點(diǎn)的位置,而是點(diǎn)的離散版本的位置,其中點(diǎn)被分類到其粗糙度對(duì)應(yīng)于帶寬的網(wǎng)格上。將此選項(xiàng)設(shè)置為T(mén)rue將加速算法,因?yàn)檩^少的種子將被初始化。默認(rèn)值:False.如果種子參數(shù)(seeds)不為None則忽略。

    ? ? ? ?c)主要屬性

    ? ? ? ? ??cluster_centers_ : 數(shù)組類型。計(jì)算出的聚類中心的坐標(biāo)。

    ? ? ? ? ??labels_ :數(shù)組類型。每個(gè)數(shù)據(jù)點(diǎn)的分類標(biāo)簽。、

    7 BIRCH?

    這篇文章寫(xiě)的很詳細(xì),可以參考一下BIRCH

    8?GaussianMixtureModel(混合高斯模型,GMM)

    ? ? ? ??正太分布也叫高斯分布,正太分布的概率密度曲線也叫高斯分布概率曲線。

    ? ? ? ? GaussianMixtureModel(混合高斯模型,GMM)。

    ? ? ? ? ?聚類算法大多數(shù)通過(guò)相似度來(lái)判斷,而相似度又大多采用歐式距離長(zhǎng)短作為衡量依據(jù)。而GMM采用了新的判斷依據(jù):概率,即通過(guò)屬于某一類的概率大小來(lái)判斷最終的歸屬類別。

    ? ? ? ? GMM的基本思想就是:任意形狀的概率分布都可以用多個(gè)高斯分布函數(shù)去近似,也就是說(shuō)GMM就是有多個(gè)單高斯密度分布(Gaussian)組成的,每個(gè)Gaussian叫一個(gè)"Component",這些"Component"線性加成在一起就組成了 GMM 的概率密度函數(shù),也就是下面的函數(shù)。

    ? ? 2)數(shù)學(xué)公式

    ? ? ? ? ?

    ? ? ? ? ?這里不講公式的具體推導(dǎo)過(guò)程,也不實(shí)現(xiàn)具體算法。列出來(lái)公式只是方便理解下面的函數(shù)中為什么需要那些參數(shù)。

    ? ? ? ? ?K:模型的個(gè)數(shù),即Component的個(gè)數(shù)(聚類的個(gè)數(shù))

    ? ? ? ? ?為第k個(gè)高斯的權(quán)重

    ? ? ? ???p(x |k) 則為第k個(gè)高斯概率密度,其均值為μk,方差為σk

    ? ? ? ? ?上述參數(shù),除了K是直接給定之外,其他參數(shù)都是通過(guò)EM算法估算出來(lái)的。(有個(gè)參數(shù)是指定EM算法參數(shù)的)

    ? ? ?3)GaussianMixtureModel 算法函數(shù)

    ? ? ? ? ?a)from sklearn.mixture.GaussianMixture

    ? ? ? ? ?b)主要參數(shù)(詳細(xì)參數(shù))

    ? ? ? ? ? ? ?n_components :高斯模型的個(gè)數(shù),即聚類的目標(biāo)個(gè)數(shù)

    ? ? ? ? ? ??covariance_type : 通過(guò)EM算法估算參數(shù)時(shí)使用的協(xié)方差類型,默認(rèn)是"full"

    ? ? ? ? ? ? ? ? ? full:每個(gè)模型使用自己的一般協(xié)方差矩陣

    ? ? ? ? ? ? ? ? ? tied:所用模型共享一個(gè)一般協(xié)方差矩陣

    ? ? ? ? ? ? ? ? ? diag:每個(gè)模型使用自己的對(duì)角線協(xié)方差矩陣

    ? ? ? ? ? ? ? ? ? spherical:每個(gè)模型使用自己的單一方差

    總結(jié)

    以上是生活随笔為你收集整理的sklearn聚类方法详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。