<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          10 種聚類算法的完整 Python 操作示例

          共 12006字,需瀏覽 25分鐘

           ·

          2022-04-16 01:15


          來(lái)源:海豚數(shù)據(jù)科學(xué)實(shí)驗(yàn)室


          大家好,我是東哥。分享一篇關(guān)于聚類的文章,10種聚類介紹和Python代碼。

          聚類或聚類分析是無(wú)監(jiān)督學(xué)習(xí)問題。它通常被用作數(shù)據(jù)分析技術(shù),用于發(fā)現(xiàn)數(shù)據(jù)中的有趣模式,例如基于其行為的客戶群。有許多聚類算法可供選擇,對(duì)于所有情況,沒有單一的最佳聚類算法。相反,最好探索一系列聚類算法以及每種算法的不同配置。在本教程中,你將發(fā)現(xiàn)如何在 python 中安裝和使用頂級(jí)聚類算法。

          完成本教程后,你將知道:
          • 聚類是在輸入數(shù)據(jù)的特征空間中查找自然組的無(wú)監(jiān)督問題。

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

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


          教程概述

          本教程分為三部分:
          1. 聚類

          2. 聚類算法

          3. 聚類算法示例

          • 庫(kù)安裝

          • 聚類數(shù)據(jù)集

          • 親和力傳播

          • 聚合聚類

          • BIRCH

          • DBSCAN

          • K-均值

          • Mini-Batch K-均值

          • Mean Shift

          • OPTICS

          • 光譜聚類

          • 高斯混合模型

          一.聚類

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

          聚類技術(shù)適用于沒有要預(yù)測(cè)的類,而是將實(shí)例劃分為自然組的情況。?

          —源自:《數(shù)據(jù)挖掘頁(yè):實(shí)用機(jī)器學(xué)習(xí)工具和技術(shù)》2016年。

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

          這些群集可能反映出在從中繪制實(shí)例的域中工作的某種機(jī)制,這種機(jī)制使某些實(shí)例彼此具有比它們與其余實(shí)例更強(qiáng)的相似性。

          —源自:《數(shù)據(jù)挖掘頁(yè):實(shí)用機(jī)器學(xué)習(xí)工具和技術(shù)》2016年。

          聚類可以作為數(shù)據(jù)分析活動(dòng)提供幫助,以便了解更多關(guān)于問題域的信息,即所謂的模式發(fā)現(xiàn)或知識(shí)發(fā)現(xiàn)。例如:
          • 該進(jìn)化樹可以被認(rèn)為是人工聚類分析的結(jié)果;
          • 將正常數(shù)據(jù)與異常值或異常分開可能會(huì)被認(rèn)為是聚類問題;
          • 根據(jù)自然行為將集群分開是一個(gè)集群?jiǎn)栴},稱為市場(chǎng)細(xì)分。
          聚類還可用作特征工程的類型,其中現(xiàn)有的和新的示例可被映射并標(biāo)記為屬于數(shù)據(jù)中所標(biāo)識(shí)的群集之一。雖然確實(shí)存在許多特定于群集的定量措施,但是對(duì)所識(shí)別的群集的評(píng)估是主觀的,并且可能需要領(lǐng)域?qū)<摇Mǔ#垲愃惴ㄔ谌斯ず铣蓴?shù)據(jù)集上與預(yù)先定義的群集進(jìn)行學(xué)術(shù)比較,預(yù)計(jì)算法會(huì)發(fā)現(xiàn)這些群集。

          聚類是一種無(wú)監(jiān)督學(xué)習(xí)技術(shù),因此很難評(píng)估任何給定方法的輸出質(zhì)量。

          —源自:《機(jī)器學(xué)習(xí)頁(yè):概率觀點(diǎn)》2012。

          二.聚類算法

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

          聚類分析的所有目標(biāo)的核心是被群集的各個(gè)對(duì)象之間的相似程度(或不同程度)的概念。聚類方法嘗試根據(jù)提供給對(duì)象的相似性定義對(duì)對(duì)象進(jìn)行分組。

          —源自:《統(tǒng)計(jì)學(xué)習(xí)的要素:數(shù)據(jù)挖掘、推理和預(yù)測(cè)》,2016年

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

          1. 親和力傳播

          2. 聚合聚類

          3. BIRCH

          4. DBSCAN

          5. K-均值

          6. Mini-Batch K-均值

          7. Mean Shift

          8. OPTICS

          9. 光譜聚類

          10. 高斯混合
          每個(gè)算法都提供了一種不同的方法來(lái)應(yīng)對(duì)數(shù)據(jù)中發(fā)現(xiàn)自然組的挑戰(zhàn)。沒有最好的聚類算法,也沒有簡(jiǎn)單的方法來(lái)找到最好的算法為您的數(shù)據(jù)沒有使用控制實(shí)驗(yàn)。在本教程中,我們將回顧如何使用來(lái)自 scikit-learn 庫(kù)的這10個(gè)流行的聚類算法中的每一個(gè)。這些示例將為您復(fù)制粘貼示例并在自己的數(shù)據(jù)上測(cè)試方法提供基礎(chǔ)。我們不會(huì)深入研究算法如何工作的理論,也不會(huì)直接比較它們。讓我們深入研究一下。

          三.聚類算法示例

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

          首先,讓我們安裝庫(kù)。不要跳過(guò)此步驟,因?yàn)槟阈枰_保安裝了最新版本。你可以使用 pip Python 安裝程序安裝 scikit-learn 存儲(chǔ)庫(kù),如下所示:

          sudo?pip?install?scikit-learn

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

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

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

          0.22.1

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

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

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

          #?綜合分類數(shù)據(jù)集
          from?numpy?import?where
          from?sklearn.datasets?import?make_classification
          from?matplotlib?import?pyplot
          #?定義數(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)
          #?為每個(gè)類的樣本創(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)簽(理想化的群集)著色。我們可以清楚地看到兩個(gè)不同的數(shù)據(jù)組在兩個(gè)維度,并希望一個(gè)自動(dòng)的聚類算法可以檢測(cè)這些分組。

          已知聚類著色點(diǎn)的合成聚類數(shù)據(jù)集的散點(diǎn)圖
          接下來(lái),我們可以開始查看應(yīng)用于此數(shù)據(jù)集的聚類算法的示例。我已經(jīng)做了一些最小的嘗試來(lái)調(diào)整每個(gè)方法到數(shù)據(jù)集。
          3.親和力傳播
          親和力傳播包括找到一組最能概括數(shù)據(jù)的范例。

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

          —源自:《通過(guò)在數(shù)據(jù)點(diǎn)之間傳遞消息》2007。

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

          下面列出了完整的示例。

          #?親和力傳播聚類
          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)
          #?為每個(gè)示例分配一個(gè)集群
          yhat?=?model.predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,我無(wú)法取得良好的結(jié)果。

          數(shù)據(jù)集的散點(diǎn)圖,具有使用親和力傳播識(shí)別的聚類
          4.聚合聚類
          聚合聚類涉及合并示例,直到達(dá)到所需的群集數(shù)量為止。它是層次聚類方法的更廣泛類的一部分,通過(guò) AgglomerationClustering 類實(shí)現(xiàn)的,主要配置是“ n _ clusters ”集,這是對(duì)數(shù)據(jù)中的群集數(shù)量的估計(jì),例如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ù)測(cè)
          yhat?=?model.fit_predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以找到一個(gè)合理的分組。

          使用聚集聚類識(shí)別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖
          5.BIRCH
          BIRCH 聚類( BIRCH 是平衡迭代減少的縮寫,聚類使用層次結(jié)構(gòu))包括構(gòu)造一個(gè)樹狀結(jié)構(gòu),從中提取聚類質(zhì)心。

          BIRCH 遞增地和動(dòng)態(tài)地群集傳入的多維度量數(shù)據(jù)點(diǎn),以嘗試?yán)每捎觅Y源(即可用內(nèi)存和時(shí)間約束)產(chǎn)生最佳質(zhì)量的聚類。

          —源自:《 BIRCH :1996年大型數(shù)據(jù)庫(kù)的高效數(shù)據(jù)聚類方法》

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

          #?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)
          #?為每個(gè)示例分配一個(gè)集群
          yhat?=?model.predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以找到一個(gè)很好的分組。

          使用BIRCH聚類確定具有聚類的數(shù)據(jù)集的散點(diǎn)圖
          6.DBSCAN
          DBSCAN 聚類(其中 DBSCAN 是基于密度的空間聚類的噪聲應(yīng)用程序)涉及在域中尋找高密度區(qū)域,并將其周圍的特征空間區(qū)域擴(kuò)展為群集。

          …我們提出了新的聚類算法 DBSCAN 依賴于基于密度的概念的集群設(shè)計(jì),以發(fā)現(xiàn)任意形狀的集群。DBSCAN 只需要一個(gè)輸入?yún)?shù),并支持用戶為其確定適當(dāng)?shù)闹?/p>

          -源自:《基于密度的噪聲大空間數(shù)據(jù)庫(kù)聚類發(fā)現(xiàn)算法》,1996

          它是通過(guò) DBSCAN 類實(shí)現(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ù)測(cè)
          yhat?=?model.fit_predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,盡管需要更多的調(diào)整,但是找到了合理的分組。

          使用DBSCAN集群識(shí)別出具有集群的數(shù)據(jù)集的散點(diǎn)圖
          7.K均值
          K-均值聚類可以是最常見的聚類算法,并涉及向群集分配示例,以盡量減少每個(gè)群集內(nèi)的方差。

          本文的主要目的是描述一種基于樣本將 N 維種群劃分為 k 個(gè)集合的過(guò)程。這個(gè)叫做“ K-均值”的過(guò)程似乎給出了在類內(nèi)方差意義上相當(dāng)有效的分區(qū)。

          -源自:《關(guān)于多元觀測(cè)的分類和分析的一些方法》1967年

          它是通過(guò) K-均值類實(shí)現(xiàn)的,要優(yōu)化的主要配置是“ n _ clusters ”超參數(shù)設(shè)置為數(shù)據(jù)中估計(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)
          #?為每個(gè)示例分配一個(gè)集群
          yhat?=?model.predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以找到一個(gè)合理的分組,盡管每個(gè)維度中的不等等方差使得該方法不太適合該數(shù)據(jù)集。

          使用K均值聚類識(shí)別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖
          8.Mini-Batch K-均值
          Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的樣本而不是整個(gè)數(shù)據(jù)集對(duì)群集質(zhì)心進(jìn)行更新,這可以使大數(shù)據(jù)集的更新速度更快,并且可能對(duì)統(tǒng)計(jì)噪聲更健壯。

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

          —源自:《Web-Scale K-均值聚類》2010

          它是通過(guò) MiniBatchKMeans 類實(shí)現(xiàn)的,要優(yōu)化的主配置是“ n _ clusters ”超參數(shù),設(shè)置為數(shù)據(jù)中估計(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)
          #?為每個(gè)示例分配一個(gè)集群
          yhat?=?model.predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,會(huì)找到與標(biāo)準(zhǔn) K-均值算法相當(dāng)?shù)慕Y(jié)果。

          帶有最小批次K均值聚類的聚類數(shù)據(jù)集的散點(diǎn)圖
          9.均值漂移聚類
          均值漂移聚類涉及到根據(jù)特征空間中的實(shí)例密度來(lái)尋找和調(diào)整質(zhì)心。

          對(duì)離散數(shù)據(jù)證明了遞推平均移位程序收斂到最接近駐點(diǎn)的基礎(chǔ)密度函數(shù),從而證明了它在檢測(cè)密度模式中的應(yīng)用。

          —源自:《Mean Shift :面向特征空間分析的穩(wěn)健方法》,2002

          它是通過(guò) MeanShift 類實(shí)現(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ù)測(cè)
          yhat?=?model.fit_predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,可以在數(shù)據(jù)中找到一組合理的群集。

          具有均值漂移聚類的聚類數(shù)據(jù)集散點(diǎn)圖
          10.OPTICS
          OPTICS 聚類( OPTICS 短于訂購(gòu)點(diǎn)數(shù)以標(biāo)識(shí)聚類結(jié)構(gòu))是上述 DBSCAN 的修改版本。

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

          —源自:《OPTICS :排序點(diǎn)以標(biāo)識(shí)聚類結(jié)構(gòu)》,1999

          它是通過(guò) OPTICS 類實(shí)現(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ù)測(cè)
          yhat?=?model.fit_predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,我無(wú)法在此數(shù)據(jù)集上獲得合理的結(jié)果。

          使用OPTICS聚類確定具有聚類的數(shù)據(jù)集的散點(diǎn)圖
          11.光譜聚類
          光譜聚類是一類通用的聚類方法,取自線性線性代數(shù)。

          最近在許多領(lǐng)域出現(xiàn)的一個(gè)有希望的替代方案是使用聚類的光譜方法。這里,使用從點(diǎn)之間的距離導(dǎo)出的矩陣的頂部特征向量。

          —源自:《關(guān)于光譜聚類:分析和算法》,2002年

          它是通過(guò) Spectral 聚類類實(shí)現(xiàn)的,而主要的 Spectral 聚類是一個(gè)由聚類方法組成的通用類,取自線性線性代數(shù)。要優(yōu)化的是“ n _ clusters ”超參數(shù),用于指定數(shù)據(jù)中的估計(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ù)測(cè)
          yhat?=?model.fit_predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。
          在這種情況下,找到了合理的集群。

          使用光譜聚類聚類識(shí)別出具有聚類的數(shù)據(jù)集的散點(diǎn)圖
          12.高斯混合模型
          高斯混合模型總結(jié)了一個(gè)多變量概率密度函數(shù),顧名思義就是混合了高斯概率分布。它是通過(guò) Gaussian Mixture 類實(shí)現(xiàn)的,要優(yōu)化的主要配置是“ n _ clusters ”超參數(shù),用于指定數(shù)據(jù)中估計(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)
          #?為每個(gè)示例分配一個(gè)集群
          yhat?=?model.predict(X)
          #?檢索唯一群集
          clusters?=?unique(yhat)
          #?為每個(gè)群集的樣本創(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ù)測(cè)數(shù)據(jù)集中每個(gè)示例的群集。然后創(chuàng)建一個(gè)散點(diǎn)圖,并由其指定的群集著色。在這種情況下,我們可以看到群集被完美地識(shí)別。這并不奇怪,因?yàn)閿?shù)據(jù)集是作為 Gaussian 的混合生成的。

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

          三.總結(jié)

          在本教程中,您發(fā)現(xiàn)了如何在 python 中安裝和使用頂級(jí)聚類算法。具體來(lái)說(shuō),你學(xué)到了:
          • 聚類是在特征空間輸入數(shù)據(jù)中發(fā)現(xiàn)自然組的無(wú)監(jiān)督問題。

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

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


          近期閱讀學(xué)習(xí)推薦

          服務(wù)器被黑客攻擊,用來(lái)挖礦!怎么辦?

          Python超好用的命令行界面實(shí)現(xiàn)工具

          Python自動(dòng)化處理Excel表格實(shí)戰(zhàn)完整代碼分享(課表解析)

          如何找到我

          分享

          收藏

          點(diǎn)贊

          在看

          瀏覽 63
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂熟女 | 中文字幕艹逼 | 天天操天天干天天操天天干 | 美女尿口无遮挡 | 网红操逼视频在线观看免费视频在线观看 |