自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聚類算法指南及 Python 實現(xiàn)

開發(fā)
聚類是任何數(shù)據(jù)科學(xué)家必備的技能集,因為它對現(xiàn)實世界問題的實用性和靈活性。本文概述了聚類和不同類型的聚類算法。

聚類是任何數(shù)據(jù)科學(xué)家必備的技能集,因為它對現(xiàn)實世界問題的實用性和靈活性。本文概述了聚類和不同類型的聚類算法。

什么是聚類?

聚類是一種流行的無監(jiān)督學(xué)習(xí)技術(shù),旨在根據(jù)對象或觀測值之間的相似性將它們分組。聚類有許多有用的應(yīng)用,如市場細(xì)分、推薦系統(tǒng)、探索性分析等。

雖然聚類是數(shù)據(jù)科學(xué)領(lǐng)域眾所周知且廣泛使用的技術(shù),但有些人可能不了解不同類型的聚類算法。雖然只有少數(shù)幾種,但理解這些算法及其工作原理對于獲得最佳結(jié)果至關(guān)重要。

基于質(zhì)心的聚類

當(dāng)談到聚類時,大多數(shù)人想到的是基于質(zhì)心的聚類。這是通過使用定義好的質(zhì)心(中心)數(shù)量,根據(jù)數(shù)據(jù)點到每個質(zhì)心的距離來對數(shù)據(jù)點進(jìn)行分組的“傳統(tǒng)”方式。質(zhì)心最終成為其分配的數(shù)據(jù)點的均值。雖然基于質(zhì)心的聚類功能強(qiáng)大,但它對異常值不魯棒,因為異常值需要被分配到某個簇中。

K-Means

K-Means是最廣泛使用的聚類算法,很可能是你作為數(shù)據(jù)科學(xué)家首先學(xué)習(xí)的第一個算法。如上所述,目標(biāo)是最小化數(shù)據(jù)點與聚類質(zhì)心之間的距離之和,以確定每個數(shù)據(jù)點應(yīng)該屬于的正確組。它的工作原理如下:

  • 在未標(biāo)記數(shù)據(jù)的向量空間中隨機(jī)放置定義好的質(zhì)心數(shù)量(初始化)。
  • 每個數(shù)據(jù)點測量自己到每個質(zhì)心的距離(通常使用歐幾里得距離),并將自己分配給最近的質(zhì)心。
  • 質(zhì)心重新定位到其分配的數(shù)據(jù)點的均值。
  • 重復(fù)步驟2-3,直到產(chǎn)生“最優(yōu)”聚類。

from sklearn.cluster import KMeans
import numpy as np

#sample data
X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

#create k-means model
kmeans = KMeans(n_clusters = 2, random_state = 0, n_init = "auto").fit(X)

#print the results, use to predict, and print centers
kmeans.labels_
kmeans.predict([[0, 0], [12, 3]])
kmeans.cluster_centers_

K-Means ++

K-Means ++是對K-Means初始化步驟的改進(jìn)。由于質(zhì)心是隨機(jī)放置的,因此有可能多個質(zhì)心可能會初始化到同一個聚類中,導(dǎo)致結(jié)果不佳。

然而,K-Means ++通過隨機(jī)分配第一個質(zhì)心來解決這個問題,這個質(zhì)心最終將找到最大的聚類。然后,其他質(zhì)心被放置在初始聚類一定距離之外。K-Means ++的目標(biāo)是盡可能將質(zhì)心彼此推得盡可能遠(yuǎn)。這會產(chǎn)生高質(zhì)量、獨特且定義明確的聚類。

from sklearn.cluster import KMeans
import numpy as np

#sample data
X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

#create k-means model
kmeans = KMeans(n_clusters = 2, random_state = 0, n_init = "k-means++").fit(X)

#print the results, use to predict, and print centers
kmeans.labels_
kmeans.predict([[0, 0], [12, 3]])
kmeans.cluster_centers_

基于密度的聚類

基于密度的算法也是一種流行的聚類形式。然而,它們不是從隨機(jī)放置的質(zhì)心測量,而是通過識別數(shù)據(jù)中的高密度區(qū)域來創(chuàng)建聚類。基于密度的算法不需要定義聚類的數(shù)量,因此優(yōu)化工作較少。

雖然基于質(zhì)心的算法在球形聚類中表現(xiàn)更好,但基于密度的算法可以采取任意形狀,更加靈活。它們也不將異常值包含在聚類中,因此是魯棒的。然而,它們可能難以處理密度不一和高維數(shù)據(jù)。

DBSCAN

DBSCAN是最受歡迎的基于密度的算法。DBSCAN的工作原理如下:

  • DBSCAN隨機(jī)選擇一個數(shù)據(jù)點,并檢查它在指定半徑內(nèi)是否有足夠的鄰居。
  • 如果該點有足夠的鄰居,它被標(biāo)記為聚類的一部分。
  • DBSCAN遞歸檢查鄰居是否也在半徑內(nèi)有足夠的鄰居,直到聚類中的所有點都被訪問過。
  • 重復(fù)步驟1-3,直到剩余的數(shù)據(jù)點在半徑內(nèi)沒有足夠的鄰居。
  • 剩余的數(shù)據(jù)點被標(biāo)記為異常值。
from sklearn.cluster import DBSCAN
import numpy as np

#sample data
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

#create model
clustering = DBSCAN(eps=3, min_samples=2).fit(X)

#print results
clustering.labels_

層次聚類

接下來,我們有層次聚類。這種方法首先從原始數(shù)據(jù)計算距離矩陣。這個距離矩陣最好通過樹狀圖(見下文)來可視化。數(shù)據(jù)點通過找到最近的鄰居一個接一個地連接在一起,最終形成一個巨大的聚類。因此,通過停止所有數(shù)據(jù)點的連接來識別聚類的截止點。

通過使用這種方法,數(shù)據(jù)科學(xué)家可以通過定義異常值并在其他聚類中排除它們來構(gòu)建一個魯棒的模型。這種方法非常適合層次數(shù)據(jù),如分類學(xué)。聚類的數(shù)量取決于深度參數(shù),可以從1-n。

from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import fcluster

#create distance matrix
linkage_data = linkage(data, method = 'ward', metric = 'euclidean', optimal_ordering = True)

#view dendrogram
dendrogram(linkage_data)
plt.title('Hierarchical Clustering Dendrogram') 
plt.xlabel('Data point') 
plt.ylabel('Distance') 
plt.show()

#assign depth and clusters
clusters = fcluster(linkage_data, 2.5, criterion = 'inconsistent', depth = 5)

基于分布的聚類

最后,基于分布的聚類考慮了除距離和密度之外的另一種度量,即概率。基于分布的聚類假設(shè)數(shù)據(jù)由概率分布組成,如正態(tài)分布。算法創(chuàng)建代表置信區(qū)間的“帶”。一個數(shù)據(jù)點離聚類中心越遠(yuǎn),我們就越不確定該數(shù)據(jù)點屬于該聚類。

由于它所做的假設(shè),基于分布的聚類很難實現(xiàn)。除非已經(jīng)進(jìn)行了嚴(yán)格的分析來確認(rèn)其結(jié)果,否則通常不建議使用。例如,使用它來識別營銷數(shù)據(jù)集中的客戶細(xì)分,并確認(rèn)這些細(xì)分遵循分布。這也是一種很好的探索性分析方法,不僅可以了解聚類的中心由什么組成,還可以了解邊緣和異常值。

結(jié)論

聚類是一種無監(jiān)督機(jī)器學(xué)習(xí)技術(shù),在許多領(lǐng)域具有日益增長的實用性。它可以用于支持?jǐn)?shù)據(jù)分析、細(xì)分項目、推薦系統(tǒng)等。在上面,我們已經(jīng)探討了它們的工作原理、優(yōu)缺點、代碼示例,甚至一些用例。我認(rèn)為,由于聚類算法的實用性和靈活性,數(shù)據(jù)科學(xué)家必須具備聚類算法的經(jīng)驗。

責(zé)任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2020-07-09 15:26:18

Python聚類算法語言

2018-05-28 15:33:09

無監(jiān)督學(xué)習(xí)算法Python

2017-05-15 11:10:10

大數(shù)據(jù)聚類算法

2022-07-29 10:31:33

算法Python

2022-05-17 09:14:50

聚類算法python

2023-10-31 09:00:00

2020-05-13 15:57:59

聚類分析算法監(jiān)督學(xué)習(xí)

2014-07-02 10:34:08

聚類算法算法

2011-07-25 15:39:49

SQL SERVER數(shù)聚類算法順序聚類算法

2011-07-26 10:16:14

SQL Server數(shù)據(jù)挖掘

2025-01-16 07:10:00

2023-04-02 14:16:45

凸集算法集合

2023-05-10 08:00:00

聚類分析數(shù)據(jù)分析聚類算法

2019-10-12 10:11:02

數(shù)據(jù)集聚類算法

2017-04-05 09:20:14

聚類算法機(jī)器學(xué)習(xí)大數(shù)據(jù)

2017-04-07 13:00:49

機(jī)器學(xué)習(xí)大數(shù)據(jù)聚類算法

2023-12-01 16:27:05

機(jī)器學(xué)習(xí)無監(jiān)督學(xué)習(xí)

2021-03-04 07:24:28

排序算法優(yōu)化

2022-03-03 19:52:25

聚類算法D2CDBSCAN

2022-04-18 09:16:47

層次聚類Python代碼
點贊
收藏

51CTO技術(shù)棧公眾號