W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
以下是數(shù)據(jù)聚類的幾種常用算法 -
K-Means 算法 K均值聚類算法是眾所周知的數(shù)據(jù)聚類算法之一。 我們需要假設(shè)簇的數(shù)量已經(jīng)是已知的。 這也被稱為平面聚類。 它是一種迭代聚類算法。 該算法需要遵循以下步驟 -
第1步 - 需要指定所需的K個(gè)子組的數(shù)量。 第2步 - 修復(fù)群集數(shù)量并將每個(gè)數(shù)據(jù)點(diǎn)隨機(jī)分配到群集。 換句話說,我們需要根據(jù)群集數(shù)量對數(shù)據(jù)進(jìn)行分類。
在這一步中,計(jì)算聚類質(zhì)心。
由于這是一種迭代算法,因此需要在每次迭代中更新 K 個(gè)質(zhì)心的位置,直到找到全局最優(yōu)值或換句話說質(zhì)心到達(dá)其最佳位置。
以下代碼將有助于在 Python 中實(shí)現(xiàn) K-means 聚類算法。 我們將使用 Scikit-learn
模塊。
導(dǎo)入必需的軟件包 -
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
以下代碼行將通過使用 sklearn.dataset
包中的 make_blob
來生成包含四個(gè) blob 的二維數(shù)據(jù)集。
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples = 500, centers = 4,
cluster_std = 0.40, random_state = 0)
可以使用下面的代碼可視化數(shù)據(jù)集 -
plt.scatter(X[:, 0], X[:, 1], s = 50);
plt.show()
得到以下結(jié)果 -
在這里,將 kmeans 初始化為 KMeans 算法,以及多少個(gè)群集 (n_clusters
) 所需的參數(shù)。
kmeans = KMeans(n_clusters = 4)
需要用輸入數(shù)據(jù)訓(xùn)練 K-means 模型。
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
plt.scatter(X[:, 0], X[:, 1], c = y_kmeans, s = 50, cmap = 'viridis')
centers = kmeans.cluster_centers_
下面給出的代碼將根據(jù)數(shù)據(jù)繪制和可視化機(jī)器的發(fā)現(xiàn),并根據(jù)要找到的聚類數(shù)量進(jìn)行擬合。
plt.scatter(centers[:, 0], centers[:, 1], c = 'black', s = 200, alpha = 0.5);
plt.show()
得到以下結(jié)果 -
均值偏移算法
它是另一種在無監(jiān)督學(xué)習(xí)中使用的流行和強(qiáng)大的聚類算法。 它不做任何假設(shè),因此它是非參數(shù)算法。 它也被稱為分層聚類或均值聚類分析。 以下將是該算法的基本步驟 -
在下面的代碼的幫助下,在 Python 中實(shí)現(xiàn)了 Mean Shift 聚類算法。使用 Scikit-learn 模塊。
導(dǎo)入必要的軟件包 -
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
以下代碼將通過使用 sklearn.dataset
包中的 make_blob 來生成包含四個(gè) blob 的二維數(shù)據(jù)集。
from sklearn.datasets.samples_generator import make_blobs
可以用下面的代碼可視化數(shù)據(jù)集 -
centers = [[2,2],[4,5],[3,10]]
X, _ = make_blobs(n_samples = 500, centers = centers, cluster_std = 1)
plt.scatter(X[:,0],X[:,1])
plt.show()
執(zhí)行上面示例代碼,得到以下結(jié)果 -
現(xiàn)在,我們需要用輸入數(shù)據(jù)來訓(xùn)練 Mean Shift 聚類模型。
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
以下代碼將按照輸入數(shù)據(jù)打印聚類中心和預(yù)期的聚類數(shù)量 -
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
[[ 3.23005036 3.84771893]
[ 3.02057451 9.88928991]]
Estimated clusters: 2
下面給出的代碼將有助于根據(jù)數(shù)據(jù)繪制和可視化機(jī)器的發(fā)現(xiàn),并根據(jù)要找到的聚類數(shù)量進(jìn)行裝配。
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
marker = "x",color = 'k', s = 150, linewidths = 5, zorder = 10)
plt.show()
執(zhí)行上面示例代碼,得到以下結(jié)果 -
現(xiàn)實(shí)世界的數(shù)據(jù)不是自然地組織成許多獨(dú)特的群集。 由于這個(gè)原因,要想象和推斷推理并不容易。 這就是為什么需要測量聚類性能及其質(zhì)量。 它可以在輪廓分析的幫助下完成。
輪廓分析
該方法可用于通過測量群集之間的距離來檢查聚類的質(zhì)量。 基本上,它提供了一種通過給出輪廓分?jǐn)?shù)來評估像集群數(shù)量這樣的參數(shù)的方法。 此分?jǐn)?shù)是衡量一個(gè)群集中每個(gè)點(diǎn)與相鄰群集中的點(diǎn)的距離的度量。
分析輪廓分?jǐn)?shù)
得分范圍為[-1,1]
。 以下是對這個(gè)分?jǐn)?shù)的分析 -
在本節(jié)中,我們將學(xué)習(xí)如何計(jì)算輪廓分?jǐn)?shù)。
輪廓分?jǐn)?shù)可以通過使用以下公式來計(jì)算 -
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: