版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
10種Python聚類算法完整操作示例聚類或聚類分析是無監(jiān)督學習問題。它通常被用作數據分析技術,用于發(fā)現數據中的有趣模式,例如基于其行為的客戶群。有許多聚類算法可供選擇,對于所有情況,沒有單一的最佳聚類算法。相反,最好探索一系列聚類算法以及每種算法的不同配置。在本教程中,你將發(fā)現如何在python中安裝和使用頂級聚類算法。完成本教程后,你將知道:聚類是在輸入數據的特征空間中查找自然組的無監(jiān)督問題。對于所有數據集,有許多不同的聚類算法和單一的最佳方法。在scikit-learn機器學習庫的Python中如何實現、適配和使用頂級聚類算法。讓我們開始吧。01聚類聚類分析,即聚類,是一項無監(jiān)督的機器學習任務。它包括自動發(fā)現數據中的自然分組。與監(jiān)督學習(類似預測建模)不同,聚類算法只解釋輸入數據,并在特征空間中找到自然組或群集。聚類技術適用于沒有要預測的類,而是將實例劃分為自然組的情況。
—源自:《數據挖掘頁:實用機器學習工具和技術》2016年。群集通常是特征空間中的密度區(qū)域,其中來自域的示例(觀測或數據行)比其他群集更接近群集。群集可以具有作為樣本或點特征空間的中心(質心),并且可以具有邊界或范圍。這些群集可能反映出在從中繪制實例的域中工作的某種機制,這種機制使某些實例彼此具有比它們與其余實例更強的相似性。
—源自:《數據挖掘頁:實用機器學習工具和技術》2016年。聚類可以作為數據分析活動提供幫助,以便了解更多關于問題域的信息,即所謂的模式發(fā)現或知識發(fā)現。例如:該進化樹可以被認為是人工聚類分析的結果;將正常數據與異常值或異常分開可能會被認為是聚類問題;根據自然行為將集群分開是一個集群問題,稱為市場細分。聚類還可用作特征工程的類型,其中現有的和新的示例可被映射并標記為屬于數據中所標識的群集之一。雖然確實存在許多特定于群集的定量措施,但是對所識別的群集的評估是主觀的,并且可能需要領域專家。通常,聚類算法在人工合成數據集上與預先定義的群集進行學術比較,預計算法會發(fā)現這些群集。聚類是一種無監(jiān)督學習技術,因此很難評估任何給定方法的輸出質量。
—源自:《機器學習頁:概率觀點》2012。02聚類算法有許多類型的聚類算法。許多算法在特征空間中的示例之間使用相似度或距離度量,以發(fā)現密集的觀測區(qū)域。因此,在使用聚類算法之前,擴展數據通常是良好的實踐。聚類分析的所有目標的核心是被群集的各個對象之間的相似程度(或不同程度)的概念。聚類方法嘗試根據提供給對象的相似性定義對對象進行分組。
—源自:《統計學習的要素:數據挖掘、推理和預測》,2016年一些聚類算法要求您指定或猜測數據中要發(fā)現的群集的數量,而另一些算法要求指定觀測之間的最小距離,其中示例可以被視為“關閉”或“連接”。因此,聚類分析是一個迭代過程,在該過程中,對所識別的群集的主觀評估被反饋回算法配置的改變中,直到達到期望的或適當的結果。scikit-learn庫提供了一套不同的聚類算法供選擇。下面列出了10種比較流行的算法:親和力傳播聚合聚類BIRCHDBSCANK-均值Mini-BatchK-均值MeanShiftOPTICS光譜聚類高斯混合每個算法都提供了一種不同的方法來應對數據中發(fā)現自然組的挑戰(zhàn)。沒有最好的聚類算法,也沒有簡單的方法來找到最好的算法為您的數據沒有使用控制實驗。在本教程中,我們將回顧如何使用來自scikit-learn庫的這10個流行的聚類算法中的每一個。這些示例將為您復制粘貼示例并在自己的數據上測試方法提供基礎。我們不會深入研究算法如何工作的理論,也不會直接比較它們。讓我們深入研究一下。03聚類算法示例在本節(jié)中,我們將回顧如何在scikit-learn中使用10個流行的聚類算法。這包括一個擬合模型的例子和可視化結果的例子。這些示例用于將粘貼復制到您自己的項目中,并將方法應用于您自己的數據。1.庫安裝首先,讓我們安裝庫。不要跳過此步驟,因為你需要確保安裝了最新版本。你可以使用pipPython安裝程序安裝scikit-learn存儲庫,如下所示:sudo
pip
install
scikit-learn接下來,讓我們確認已經安裝了庫,并且您正在使用一個現代版本。運行以下腳本以輸出庫版本號。#
檢查
scikit-learn
版本
import
sklearn
print(sklearn.__version__)運行該示例時,您應該看到以下版本號或更高版本。0.22.12.聚類數據集我們將使用make_classification()函數創(chuàng)建一個測試二分類數據集。數據集將有1000個示例,每個類有兩個輸入要素和一個群集。這些群集在兩個維度上是可見的,因此我們可以用散點圖繪制數據,并通過指定的群集對圖中的點進行顏色繪制。這將有助于了解,至少在測試問題上,群集的識別能力如何。該測試問題中的群集基于多變量高斯,并非所有聚類算法都能有效地識別這些類型的群集。因此,本教程中的結果不應用作比較一般方法的基礎。下面列出了創(chuàng)建和匯總合成聚類數據集的示例。#
綜合分類數據集
from
numpy
import
where
from
sklearn.datasets
import
make_classification
from
matplotlib
import
pyplot
#
定義數據集
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)建散點圖
for
class_value
in
range(2):
#
獲取此類的示例的行索引
row_ix
=
where(y
==
class_value)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例將創(chuàng)建合成的聚類數據集,然后創(chuàng)建輸入數據的散點圖,其中點由類標簽(理想化的群集)著色。我們可以清楚地看到兩個不同的數據組在兩個維度,并希望一個自動的聚類算法可以檢測這些分組。已知聚類著色點的合成聚類數據集的散點圖接下來,我們可以開始查看應用于此數據集的聚類算法的示例。我已經做了一些最小的嘗試來調整每個方法到數據集。3.親和力傳播親和力傳播包括找到一組最能概括數據的范例。我們設計了一種名為“親和傳播”的方法,它作為兩對數據點之間相似度的輸入度量。在數據點之間交換實值消息,直到一組高質量的范例和相應的群集逐漸出現
—源自:《通過在數據點之間傳遞消息》2007。它是通過AffinityPropagation類實現的,要調整的主要配置是將“阻尼”設置為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
#
定義數據集
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)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,我無法取得良好的結果。數據集的散點圖,具有使用親和力傳播識別的聚類4.聚合聚類聚合聚類涉及合并示例,直到達到所需的群集數量為止。它是層次聚類方法的更廣泛類的一部分,通過AgglomerationClustering類實現的,主要配置是“n_clusters”集,這是對數據中的群集數量的估計,例如2。下面列出了完整的示例。#
聚合聚類
from
numpy
import
unique
from
numpy
import
where
from
sklearn.datasets
import
make_classification
from
sklearn.cluster
import
AgglomerativeClustering
from
matplotlib
import
pyplot
#
定義數據集
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)
#
模型擬合與聚類預測
yhat
=
model.fit_predict(X)
#
檢索唯一群集
clusters
=
unique(yhat)
#
為每個群集的樣本創(chuàng)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,可以找到一個合理的分組。使用聚集聚類識別出具有聚類的數據集的散點圖5.BIRCHBIRCH聚類(BIRCH是平衡迭代減少的縮寫,聚類使用層次結構)包括構造一個樹狀結構,從中提取聚類質心。BIRCH遞增地和動態(tài)地群集傳入的多維度量數據點,以嘗試利用可用資源(即可用內存和時間約束)產生最佳質量的聚類。
—源自:《BIRCH:1996年大型數據庫的高效數據聚類方法》它是通過Birch類實現的,主要配置是“threshold”和“n_clusters”超參數,后者提供了群集數量的估計。下面列出了完整的示例。#
birch聚類
from
numpy
import
unique
from
numpy
import
where
from
sklearn.datasets
import
make_classification
from
sklearn.cluster
import
Birch
from
matplotlib
import
pyplot
#
定義數據集
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)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,可以找到一個很好的分組。使用BIRCH聚類確定具有聚類的數據集的散點圖6.DBSCANDBSCAN聚類(其中DBSCAN是基于密度的空間聚類的噪聲應用程序)涉及在域中尋找高密度區(qū)域,并將其周圍的特征空間區(qū)域擴展為群集。…我們提出了新的聚類算法DBSCAN依賴于基于密度的概念的集群設計,以發(fā)現任意形狀的集群。DBSCAN只需要一個輸入參數,并支持用戶為其確定適當的值
-源自:《基于密度的噪聲大空間數據庫聚類發(fā)現算法》,1996它是通過DBSCAN類實現的,主要配置是“eps”和“min_samples”超參數。下面列出了完整的示例。#
dbscan
聚類
from
numpy
import
unique
from
numpy
import
where
from
sklearn.datasets
import
make_classification
from
sklearn.cluster
import
DBSCAN
from
matplotlib
import
pyplot
#
定義數據集
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)
#
模型擬合與聚類預測
yhat
=
model.fit_predict(X)
#
檢索唯一群集
clusters
=
unique(yhat)
#
為每個群集的樣本創(chuàng)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,盡管需要更多的調整,但是找到了合理的分組。使用DBSCAN集群識別出具有集群的數據集的散點圖7.K均值K-均值聚類可以是最常見的聚類算法,并涉及向群集分配示例,以盡量減少每個群集內的方差。本文的主要目的是描述一種基于樣本將N維種群劃分為k個集合的過程。這個叫做“K-均值”的過程似乎給出了在類內方差意義上相當有效的分區(qū)。
-源自:《關于多元觀測的分類和分析的一些方法》1967年。它是通過K-均值類實現的,要優(yōu)化的主要配置是“n_clusters”超參數設置為數據中估計的群集數量。下面列出了完整的示例。#
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
#
定義數據集
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)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,可以找到一個合理的分組,盡管每個維度中的不等等方差使得該方法不太適合該數據集。使用K均值聚類識別出具有聚類的數據集的散點圖8.Mini-BatchK-均值Mini-BatchK-均值是K-均值的修改版本,它使用小批量的樣本而不是整個數據集對群集質心進行更新,這可以使大數據集的更新速度更快,并且可能對統計噪聲更健壯。...我們建議使用k-均值聚類的迷你批量優(yōu)化。與經典批處理算法相比,這降低了計算成本的數量級,同時提供了比在線隨機梯度下降更好的解決方案。
—源自:《Web-ScaleK-均值聚類》2010它是通過MiniBatchKMeans類實現的,要優(yōu)化的主配置是“n_clusters”超參數,設置為數據中估計的群集數量。下面列出了完整的示例。#
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
#
定義數據集
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)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,會找到與標準K-均值算法相當的結果。帶有最小批次K均值聚類的聚類數據集的散點圖9.均值漂移聚類均值漂移聚類涉及到根據特征空間中的實例密度來尋找和調整質心。對離散數據證明了遞推平均移位程序收斂到最接近駐點的基礎密度函數,從而證明了它在檢測密度模式中的應用。
—源自:《MeanShift:面向特征空間分析的穩(wěn)健方法》,2002它是通過MeanShift類實現的,主要配置是“帶寬”超參數。下面列出了完整的示例。#
均值漂移聚類
from
numpy
import
unique
from
numpy
import
where
from
sklearn.datasets
import
make_classification
from
sklearn.cluster
import
MeanShift
from
matplotlib
import
pyplot
#
定義數據集
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()
#
模型擬合與聚類預測
yhat
=
model.fit_predict(X)
#
檢索唯一群集
clusters
=
unique(yhat)
#
為每個群集的樣本創(chuàng)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,可以在數據中找到一組合理的群集。具有均值漂移聚類的聚類數據集散點圖10.OPTICSOPTICS聚類(OPTICS短于訂購點數以標識聚類結構)是上述DBSCAN的修改版本。我們?yōu)榫垲惙治鲆肓艘环N新的算法,它不會顯式地生成一個數據集的聚類;而是創(chuàng)建表示其基于密度的聚類結構的數據庫的增強排序。此群集排序包含相當于密度聚類的信息,該信息對應于范圍廣泛的參數設置。
—源自:《OPTICS:排序點以標識聚類結構》,1999它是通過OPTICS類實現的,主要配置是“eps”和“min_samples”超參數。下面列出了完整的示例。#
optics聚類
from
numpy
import
unique
from
numpy
import
where
from
sklearn.datasets
import
make_classification
from
sklearn.cluster
import
OPTICS
from
matplotlib
import
pyplot
#
定義數據集
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)
#
模型擬合與聚類預測
yhat
=
model.fit_predict(X)
#
檢索唯一群集
clusters
=
unique(yhat)
#
為每個群集的樣本創(chuàng)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
cluster)
#
創(chuàng)建這些樣本的散布
pyplot.scatter(X[row_ix,
0],
X[row_ix,
1])
#
繪制散點圖
pyplot.show()運行該示例符合訓練數據集上的模型,并預測數據集中每個示例的群集。然后創(chuàng)建一個散點圖,并由其指定的群集著色。在這種情況下,我無法在此數據集上獲得合理的結果。使用OPTICS聚類確定具有聚類的數據集的散點圖11.光譜聚類光譜聚類是一類通用的聚類方法,取自線性線性代數。最近在許多領域出現的一個有希望的替代方案是使用聚類的光譜方法。這里,使用從點之間的距離導出的矩陣的頂部特征向量。
—源自:《關于光譜聚類:分析和算法》,2002年它是通過Spectral聚類類實現的,而主要的Spectral聚類是一個由聚類方法組成的通用類,取自線性線性代數。要優(yōu)化的是“n_clusters”超參數,用于指定數據中的估計群集數量。下面列出了完整的示例。#
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
#
定義數據集
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)
#
模型擬合與聚類預測
yhat
=
model.fit_predict(X)
#
檢索唯一群集
clusters
=
unique(yhat)
#
為每個群集的樣本創(chuàng)建散點圖
for
cluster
in
clusters:
#
獲取此群集的示例的行索引
row_ix
=
where(yhat
==
c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡安全知識培訓課件
- 二年級數學(上)計算題專項練習
- 團隊建設與管理技巧培訓課件
- 班主任工作經驗交流36
- 二零二五年度國際農業(yè)合作與農產品貿易合同參考模板6篇
- 收費站業(yè)務知識培訓課件
- 生產經營單位生產安全事故應急處置卡編制指南
- 二零二五年度房屋信托代理銷售合同范本3篇
- 鄉(xiāng)村振興戰(zhàn)略下農村醫(yī)養(yǎng)結合型養(yǎng)老服務體系研究
- 倉庫年終工作總結
- GA 172-2014金屬手銬
- 醫(yī)學醫(yī)學文獻檢索與論文寫作培訓課件
- SQL Server 2000在醫(yī)院收費審計的運用
- 北師大版小學三年級數學下冊課件(全冊)
- 工程臨時用工確認單
- 簡約清新大氣餐飲行業(yè)企業(yè)介紹模板課件
- 氮氣窒息事故案例經驗分享
- 某公司年度生產經營計劃書
- 廠房租賃合同標準版(通用10篇)
- 《教育心理學》教材
- 易制毒化學品安全管理制度(3篇)
評論
0/150
提交評論