欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

10個Python實現(xiàn)的最頻繁使用的聚類算法

 更新時間:2022年12月29日 08:38:29   作者:Python數(shù)據(jù)開發(fā)  
聚類或聚類分析是無監(jiān)督學(xué)習(xí)問題。它通常被用作數(shù)據(jù)分析技術(shù),用于發(fā)現(xiàn)數(shù)據(jù)中的有趣模式。本文為大家介紹了10個最頻繁使用的聚類算法,感興趣的可以了解一下

大家好,聚類或聚類分析是無監(jiān)督學(xué)習(xí)問題。它通常被用作數(shù)據(jù)分析技術(shù),用于發(fā)現(xiàn)數(shù)據(jù)中的有趣模式,例如基于其行為的客戶群。

有許多聚類算法可供選擇,對于所有情況,沒有單一的最佳聚類算法。相反,最好探索一系列聚類算法以及每種算法的不同配置。在本教程中,你將發(fā)現(xiàn)如何在 python 中安裝和使用頂級聚類算法。

一、聚類

聚類分析,即聚類,是一項無監(jiān)督的機(jī)器學(xué)習(xí)任務(wù)。它包括自動發(fā)現(xiàn)數(shù)據(jù)中的自然分組。與監(jiān)督學(xué)習(xí)(類似預(yù)測建模)不同,聚類算法只解釋輸入數(shù)據(jù),并在特征空間中找到自然組或群集。

聚類技術(shù)適用于沒有要預(yù)測的類,而是將實例劃分為自然組的情況。—源自:《數(shù)據(jù)挖掘頁:實用機(jī)器學(xué)習(xí)工具和技術(shù)》2016年。

群集通常是特征空間中的密度區(qū)域,其中來自域的示例(觀測或數(shù)據(jù)行)比其他群集更接近群集。群集可以具有作為樣本或點(diǎn)特征空間的中心(質(zhì)心),并且可以具有邊界或范圍。

這些群集可能反映出在從中繪制實例的域中工作的某種機(jī)制,這種機(jī)制使某些實例彼此具有比它們與其余實例更強(qiáng)的相似性。—源自:《數(shù)據(jù)挖掘頁:實用機(jī)器學(xué)習(xí)工具和技術(shù)》2016年。

聚類可以作為數(shù)據(jù)分析活動提供幫助,以便了解更多關(guān)于問題域的信息,即所謂的模式發(fā)現(xiàn)或知識發(fā)現(xiàn)。例如:

  • 該進(jìn)化樹可以被認(rèn)為是人工聚類分析的結(jié)果;
  • 將正常數(shù)據(jù)與異常值或異常分開可能會被認(rèn)為是聚類問題;
  • 根據(jù)自然行為將集群分開是一個集群問題,稱為市場細(xì)分。

聚類還可用作特征工程的類型,其中現(xiàn)有的和新的示例可被映射并標(biāo)記為屬于數(shù)據(jù)中所標(biāo)識的群集之一。雖然確實存在許多特定于群集的定量措施,但是對所識別的群集的評估是主觀的,并且可能需要領(lǐng)域?qū)<?。通常,聚類算法在人工合成?shù)據(jù)集上與預(yù)先定義的群集進(jìn)行學(xué)術(shù)比較,預(yù)計算法會發(fā)現(xiàn)這些群集。

聚類是一種無監(jiān)督學(xué)習(xí)技術(shù),因此很難評估任何給定方法的輸出質(zhì)量。—源自:《機(jī)器學(xué)習(xí)頁:概率觀點(diǎn)》2012。

二、聚類算法

有許多類型的聚類算法。許多算法在特征空間中的示例之間使用相似度或距離度量,以發(fā)現(xiàn)密集的觀測區(qū)域。因此,在使用聚類算法之前,擴(kuò)展數(shù)據(jù)通常是良好的實踐。

聚類分析的所有目標(biāo)的核心是被群集的各個對象之間的相似程度(或不同程度)的概念。聚類方法嘗試根據(jù)提供給對象的相似性定義對對象進(jìn)行分組。—源自:《統(tǒng)計學(xué)習(xí)的要素:數(shù)據(jù)挖掘、推理和預(yù)測》,2016年

一些聚類算法要求您指定或猜測數(shù)據(jù)中要發(fā)現(xiàn)的群集的數(shù)量,而另一些算法要求指定觀測之間的最小距離,其中示例可以被視為“關(guān)閉”或“連接”。因此,聚類分析是一個迭代過程,在該過程中,對所識別的群集的主觀評估被反饋回算法配置的改變中,直到達(dá)到期望的或適當(dāng)?shù)慕Y(jié)果。scikit-learn 庫提供了一套不同的聚類算法供選擇。下面列出了10種比較流行的算法:

  • 親和力傳播
  • 聚合聚類
  • BIRCH
  • DBSCAN
  • K-均值
  • Mini-Batch K-均值
  • Mean Shift
  • OPTICS
  • 光譜聚類
  • 高斯混合

每個算法都提供了一種不同的方法來應(yīng)對數(shù)據(jù)中發(fā)現(xiàn)自然組的挑戰(zhàn)。沒有最好的聚類算法,也沒有簡單的方法來找到最好的算法為您的數(shù)據(jù)沒有使用控制實驗。

在本教程中,我們將回顧如何使用來自 scikit-learn 庫的這10個流行的聚類算法中的每一個。這些示例將為您復(fù)制粘貼示例并在自己的數(shù)據(jù)上測試方法提供基礎(chǔ)。我們不會深入研究算法如何工作的理論,也不會直接比較它們。讓我們深入研究一下。

三、聚類算法示例

在本節(jié)中,我們將回顧如何在 scikit-learn 中使用10個流行的聚類算法。這包括一個擬合模型的例子和可視化結(jié)果的例子。這些示例用于將粘貼復(fù)制到您自己的項目中,并將方法應(yīng)用于您自己的數(shù)據(jù)。

1、庫安裝

首先,讓我們安裝庫。不要跳過此步驟,因為你需要確保安裝了最新版本。你可以使用 pip Python 安裝程序安裝 scikit-learn 存儲庫,如下所示:

sudo pip install scikit-learn  

接下來,讓我們確認(rèn)已經(jīng)安裝了庫,并且您正在使用一個現(xiàn)代版本。運(yùn)行以下腳本以輸出庫版本號。

# 檢查 scikit-learn 版本  
import sklearn  
print(sklearn.__version__)  

運(yùn)行該示例時,您應(yīng)該看到以下版本號或更高版本。

0.22.1

2、聚類數(shù)據(jù)集

我們將使用 make _ classification ()函數(shù)創(chuàng)建一個測試二分類數(shù)據(jù)集。數(shù)據(jù)集將有1000個示例,每個類有兩個輸入要素和一個群集。這些群集在兩個維度上是可見的,因此我們可以用散點(diǎn)圖繪制數(shù)據(jù),并通過指定的群集對圖中的點(diǎn)進(jìn)行顏色繪制。

這將有助于了解,至少在測試問題上,群集的識別能力如何。該測試問題中的群集基于多變量高斯,并非所有聚類算法都能有效地識別這些類型的群集。因此,本教程中的結(jié)果不應(yīng)用作比較一般方法的基礎(chǔ)。下面列出了創(chuàng)建和匯總合成聚類數(shù)據(jù)集的示例。

# 綜合分類數(shù)據(jù)集  
from numpy import where  
from sklearn.datasets import make_classification  
from matplotlib import pyplot  
%matplotlib inline  
  
# 定義數(shù)據(jù)集  
X, y = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,   
                           n_clusters_per_class=1,   
                           random_state=4)  
# 為每個類的樣本創(chuàng)建散點(diǎn)圖  
for class_value in range(2):  
    # 獲取此類的示例的行索引  
    row_ix = where(y == class_value)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
    # 繪制散點(diǎn)圖  
pyplot.show()

運(yùn)行該示例將創(chuàng)建合成的聚類數(shù)據(jù)集,然后創(chuàng)建輸入數(shù)據(jù)的散點(diǎn)圖,其中點(diǎn)由類標(biāo)簽(理想化的群集)著色。我們可以清楚地看到兩個不同的數(shù)據(jù)組在兩個維度,并希望一個自動的聚類算法可以檢測這些分組。

圖:已知聚類著色點(diǎn)的合成聚類數(shù)據(jù)集的散點(diǎn)圖

接下來,我們可以開始查看應(yīng)用于此數(shù)據(jù)集的聚類算法的示例。我已經(jīng)做了一些最小的嘗試來調(diào)整每個方法到數(shù)據(jù)集。

3、親和力傳播

親和力傳播包括找到一組最能概括數(shù)據(jù)的范例。

我們設(shè)計了一種名為“親和傳播”的方法,它作為兩對數(shù)據(jù)點(diǎn)之間相似度的輸入度量。在數(shù)據(jù)點(diǎn)之間交換實值消息,直到一組高質(zhì)量的范例和相應(yīng)的群集逐漸出現(xiàn)—源自:《通過在數(shù)據(jù)點(diǎn)之間傳遞消息》2007。

它是通過 AffinityPropagation 類實現(xiàn)的,要調(diào)整的主要配置是將“ 阻尼 ”設(shè)置為0.5到1,甚至可能是“首選項”。

下面列出了完整的示例。

# 親和力傳播聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import AffinityPropagation  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,   
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = AffinityPropagation(damping=0.9)  
# 匹配模型  
model.fit(X)  
# 為每個示例分配一個集群  
yhat = model.predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,我無法取得良好的結(jié)果。

圖:數(shù)據(jù)集的散點(diǎn)圖,具有使用親和力傳播識別的聚類

4、聚合聚類

聚合聚類涉及合并示例,直到達(dá)到所需的群集數(shù)量為止。它是層次聚類方法的更廣泛類的一部分,通過 AgglomerationClustering 類實現(xiàn)的,主要配置是“ n _ clusters ”集,這是對數(shù)據(jù)中的群集數(shù)量的估計,例如2。下面列出了完整的示例。

# 聚合聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import AgglomerativeClustering  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,   
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = AgglomerativeClustering(n_clusters=2)  
# 模型擬合與聚類預(yù)測  
yhat = model.fit_predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以找到一個合理的分組。

圖:使用聚集聚類識別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖

5、BIRCH

BIRCH 聚類( BIRCH 是平衡迭代減少的縮寫,聚類使用層次結(jié)構(gòu))包括構(gòu)造一個樹狀結(jié)構(gòu),從中提取聚類質(zhì)心。

BIRCH 遞增地和動態(tài)地群集傳入的多維度量數(shù)據(jù)點(diǎn),以嘗試?yán)每捎觅Y源(即可用內(nèi)存和時間約束)產(chǎn)生最佳質(zhì)量的聚類。—源自:《 BIRCH :1996年大型數(shù)據(jù)庫的高效數(shù)據(jù)聚類方法》

它是通過 Birch 類實現(xiàn)的,主要配置是“ threshold ”和“ n _ clusters ”超參數(shù),后者提供了群集數(shù)量的估計。下面列出了完整的示例。

# birch聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import Birch  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,  
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = Birch(threshold=0.01, n_clusters=2)  
# 適配模型  
model.fit(X)  
# 為每個示例分配一個集群  
yhat = model.predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以找到一個很好的分組。

圖:使用BIRCH聚類確定具有聚類的數(shù)據(jù)集的散點(diǎn)圖

6、DBSCAN

DBSCAN 聚類(其中 DBSCAN 是基于密度的空間聚類的噪聲應(yīng)用程序)涉及在域中尋找高密度區(qū)域,并將其周圍的特征空間區(qū)域擴(kuò)展為群集。

…我們提出了新的聚類算法 DBSCAN 依賴于基于密度的概念的集群設(shè)計,以發(fā)現(xiàn)任意形狀的集群。DBSCAN 只需要一個輸入?yún)?shù),并支持用戶為其確定適當(dāng)?shù)闹?源自:《基于密度的噪聲大空間數(shù)據(jù)庫聚類發(fā)現(xiàn)算法》,1996

它是通過 DBSCAN 類實現(xiàn)的,主要配置是“ eps ”和“ min _ samples ”超參數(shù)。

下面列出了完整的示例。

# dbscan 聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import DBSCAN  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,   
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = DBSCAN(eps=0.30, min_samples=9)  
# 模型擬合與聚類預(yù)測  
yhat = model.fit_predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,盡管需要更多的調(diào)整,但是找到了合理的分組。

圖:使用DBSCAN集群識別出具有集群的數(shù)據(jù)集的散點(diǎn)圖

7、K均值

K-均值聚類可以是最常見的聚類算法,并涉及向群集分配示例,以盡量減少每個群集內(nèi)的方差。

本文的主要目的是描述一種基于樣本將 N 維種群劃分為 k 個集合的過程。這個叫做“ K-均值”的過程似乎給出了在類內(nèi)方差意義上相當(dāng)有效的分區(qū)。-源自:《關(guān)于多元觀測的分類和分析的一些方法》1967年

它是通過 K-均值類實現(xiàn)的,要優(yōu)化的主要配置是“ n _ clusters ”超參數(shù)設(shè)置為數(shù)據(jù)中估計的群集數(shù)量。下面列出了完整的示例。

# k-means 聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import KMeans  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,  
                           n_redundant=0,  
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = KMeans(n_clusters=2)  
# 模型擬合  
model.fit(X)  
# 為每個示例分配一個集群  
yhat = model.predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以找到一個合理的分組,盡管每個維度中的不等等方差使得該方法不太適合該數(shù)據(jù)集。

圖:使用K均值聚類識別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖

8、Mini-Batch K-均值

Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的樣本而不是整個數(shù)據(jù)集對群集質(zhì)心進(jìn)行更新,這可以使大數(shù)據(jù)集的更新速度更快,并且可能對統(tǒng)計噪聲更健壯。

…我們建議使用 k-均值聚類的迷你批量優(yōu)化。與經(jīng)典批處理算法相比,這降低了計算成本的數(shù)量級,同時提供了比在線隨機(jī)梯度下降更好的解決方案。—源自:《Web-Scale K-均值聚類》2010

它是通過 MiniBatchKMeans 類實現(xiàn)的,要優(yōu)化的主配置是“ n _ clusters ”超參數(shù),設(shè)置為數(shù)據(jù)中估計的群集數(shù)量。下面列出了完整的示例。

# mini-batch k均值聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import MiniBatchKMeans  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,  
                           n_clusters_per_class=1,  
                           random_state=4)  
# 定義模型  
model = MiniBatchKMeans(n_clusters=2)  
# 模型擬合  
model.fit(X)  
# 為每個示例分配一個集群  
yhat = model.predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,會找到與標(biāo)準(zhǔn) K-均值算法相當(dāng)?shù)慕Y(jié)果。

圖:帶有最小批次K均值聚類的聚類數(shù)據(jù)集的散點(diǎn)圖

9、均值漂移聚類

均值漂移聚類涉及到根據(jù)特征空間中的實例密度來尋找和調(diào)整質(zhì)心。

對離散數(shù)據(jù)證明了遞推平均移位程序收斂到最接近駐點(diǎn)的基礎(chǔ)密度函數(shù),從而證明了它在檢測密度模式中的應(yīng)用。—源自:《Mean Shift :面向特征空間分析的穩(wěn)健方法》,2002

它是通過 MeanShift 類實現(xiàn)的,主要配置是“帶寬”超參數(shù)。下面列出了完整的示例。

# 均值漂移聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import MeanShift  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,  
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,   
                           n_clusters_per_class=1,  
                           random_state=4)  
# 定義模型  
model = MeanShift()  
# 模型擬合與聚類預(yù)測  
yhat = model.fit_predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以在數(shù)據(jù)中找到一組合理的群集。

圖:具有均值漂移聚類的聚類數(shù)據(jù)集散點(diǎn)圖

10、OPTICS

OPTICS 聚類( OPTICS 短于訂購點(diǎn)數(shù)以標(biāo)識聚類結(jié)構(gòu))是上述 DBSCAN 的修改版本。

我們?yōu)榫垲惙治鲆肓艘环N新的算法,它不會顯式地生成一個數(shù)據(jù)集的聚類;而是創(chuàng)建表示其基于密度的聚類結(jié)構(gòu)的數(shù)據(jù)庫的增強(qiáng)排序。此群集排序包含相當(dāng)于密度聚類的信息,該信息對應(yīng)于范圍廣泛的參數(shù)設(shè)置。—源自:《OPTICS :排序點(diǎn)以標(biāo)識聚類結(jié)構(gòu)》,1999

它是通過 OPTICS 類實現(xiàn)的,主要配置是“ eps ”和“ min _ samples ”超參數(shù)。下面列出了完整的示例。

# optics聚類  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import OPTICS  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,   
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = OPTICS(eps=0.8, min_samples=10)  
# 模型擬合與聚類預(yù)測  
yhat = model.fit_predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,我無法在此數(shù)據(jù)集上獲得合理的結(jié)果。

圖:使用OPTICS聚類確定具有聚類的數(shù)據(jù)集的散點(diǎn)圖

11、光譜聚類

光譜聚類是一類通用的聚類方法,取自線性線性代數(shù)。

最近在許多領(lǐng)域出現(xiàn)的一個有希望的替代方案是使用聚類的光譜方法。這里,使用從點(diǎn)之間的距離導(dǎo)出的矩陣的頂部特征向量。—源自:《關(guān)于光譜聚類:分析和算法》,2002年

它是通過 Spectral 聚類類實現(xiàn)的,而主要的 Spectral 聚類是一個由聚類方法組成的通用類,取自線性線性代數(shù)。要優(yōu)化的是“ n _ clusters ”超參數(shù),用于指定數(shù)據(jù)中的估計群集數(shù)量。下面列出了完整的示例。

# spectral clustering  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.cluster import SpectralClustering  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,   
                           n_redundant=0,  
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = SpectralClustering(n_clusters=2)  
# 模型擬合與聚類預(yù)測  
yhat = model.fit_predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。

在這種情況下,找到了合理的集群。

圖:使用光譜聚類聚類識別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖

12、高斯混合模型

高斯混合模型總結(jié)了一個多變量概率密度函數(shù),顧名思義就是混合了高斯概率分布。它是通過 Gaussian Mixture 類實現(xiàn)的,要優(yōu)化的主要配置是“ n _ clusters ”超參數(shù),用于指定數(shù)據(jù)中估計的群集數(shù)量。下面列出了完整的示例。

# 高斯混合模型  
from numpy import unique  
from numpy import where  
from sklearn.datasets import make_classification  
from sklearn.mixture import GaussianMixture  
from matplotlib import pyplot  
# 定義數(shù)據(jù)集  
X, _ = make_classification(n_samples=1000,   
                           n_features=2,   
                           n_informative=2,  
                           n_redundant=0,  
                           n_clusters_per_class=1,   
                           random_state=4)  
# 定義模型  
model = GaussianMixture(n_components=2)  
# 模型擬合  
model.fit(X)  
# 為每個示例分配一個集群  
yhat = model.predict(X)  
# 檢索唯一群集  
clusters = unique(yhat)  
# 為每個群集的樣本創(chuàng)建散點(diǎn)圖  
for cluster in clusters:  
    # 獲取此群集的示例的行索引  
    row_ix = where(yhat == cluster)  
    # 創(chuàng)建這些樣本的散布  
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1])  
# 繪制散點(diǎn)圖  
pyplot.show()  

運(yùn)行該示例符合訓(xùn)練數(shù)據(jù)集上的模型,并預(yù)測數(shù)據(jù)集中每個示例的群集。然后創(chuàng)建一個散點(diǎn)圖,并由其指定的群集著色。在這種情況下,我們可以看到群集被完美地識別。這并不奇怪,因為數(shù)據(jù)集是作為 Gaussian 的混合生成的。

圖:使用高斯混合聚類識別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖

三、總結(jié)

在本教程中,您發(fā)現(xiàn)了如何在 python 中安裝和使用頂級聚類算法。具體來說,你學(xué)到了:

聚類是在特征空間輸入數(shù)據(jù)中發(fā)現(xiàn)自然組的無監(jiān)督問題。

有許多不同的聚類算法,對于所有數(shù)據(jù)集沒有單一的最佳方法。

在 scikit-learn 機(jī)器學(xué)習(xí)庫的 Python 中如何實現(xiàn)、適合和使用10種頂級聚類算法

以上就是10個Python實現(xiàn)的最頻繁使用的聚類算法的詳細(xì)內(nèi)容,更多關(guān)于Python聚類算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python字符串格式化之使用format()方法

    Python字符串格式化之使用format()方法

    這篇文章主要介紹了Python字符串格式化之使用format()方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Django利用elasticsearch(搜索引擎)實現(xiàn)搜索功能

    Django利用elasticsearch(搜索引擎)實現(xiàn)搜索功能

    這篇文章主要介紹了Django利用elasticsearch(搜索引擎)實現(xiàn)搜索功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 在python中實現(xiàn)發(fā)送短信功能

    在python中實現(xiàn)發(fā)送短信功能

    工作中我們經(jīng)常會用到發(fā)短信的需求,那么如何在python代碼中實現(xiàn)發(fā)短息你的需求呢,本文我們就一起深入探討下,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-04-04
  • 對pandas數(shù)據(jù)判斷是否為NaN值的方法詳解

    對pandas數(shù)據(jù)判斷是否為NaN值的方法詳解

    今天小編就為大家分享一篇對pandas數(shù)據(jù)判斷是否為NaN值的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 用python打包exe應(yīng)用程序及PyInstaller安裝方式

    用python打包exe應(yīng)用程序及PyInstaller安裝方式

    PyInstaller 制作出來的執(zhí)行文件并不是跨平臺的,如果需要為不同平臺打包,就要在相應(yīng)平臺上運(yùn)行PyInstaller進(jìn)行打包。今天通過本文給大家介紹用python打包exe應(yīng)用程序及PyInstaller安裝方式,感興趣的朋友一起看看吧
    2021-12-12
  • Anaconda的安裝與虛擬環(huán)境建立

    Anaconda的安裝與虛擬環(huán)境建立

    這篇文章主要介紹了Anaconda的安裝與虛擬環(huán)境建立
    2020-11-11
  • Python-split()函數(shù)實例用法講解

    Python-split()函數(shù)實例用法講解

    在本篇文章里小編給大家整理的是一篇關(guān)于Python-split()函數(shù)實例用法講解,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python自動化運(yùn)維_文件內(nèi)容差異對比分析

    Python自動化運(yùn)維_文件內(nèi)容差異對比分析

    下面小編就為大家分享一篇Python自動化運(yùn)維_文件內(nèi)容差異對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python數(shù)據(jù)可視化庫seaborn的使用總結(jié)

    Python數(shù)據(jù)可視化庫seaborn的使用總結(jié)

    這篇文章主要介紹了Python數(shù)據(jù)可視化庫seaborn的使用總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • django?python?獲取當(dāng)天日期的方法

    django?python?獲取當(dāng)天日期的方法

    這篇文章主要介紹了django?python?獲取當(dāng)天日期,在Python中,你可以使用datetime模塊來獲取當(dāng)前日期,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論