K-均值聚類(lèi)算法計(jì)算質(zhì)心并進(jìn)行迭代,直到找到最佳質(zhì)心為止,它假定群集的數(shù)目是已知的,它也稱為扁平聚類(lèi)算法。通過(guò)算法從數(shù)據(jù)中識(shí)別出的簇?cái)?shù)以K均值中的" K"表示。
在該算法中,將數(shù)據(jù)點(diǎn)分配給群集,以使數(shù)據(jù)點(diǎn)和質(zhì)心之間的平方距離之和最小。應(yīng)當(dāng)理解,簇內(nèi)的較少變化將導(dǎo)致相同簇內(nèi)的更多相似數(shù)據(jù)點(diǎn)。
K均值算法
無(wú)涯教程可以通過(guò)以下步驟來(lái)了解K-Means聚類(lèi)算法的工作原理-
第1步? ?- 首先,需要指定需要由該算法生成的簇?cái)?shù)K。
第2步? ?- 接下來(lái),隨機(jī)選擇K個(gè)數(shù)據(jù)點(diǎn)并將每個(gè)數(shù)據(jù)點(diǎn)分配給一個(gè)群集,簡(jiǎn)單來(lái)說(shuō),就是根據(jù)數(shù)據(jù)點(diǎn)的數(shù)量對(duì)數(shù)據(jù)進(jìn)行分類(lèi)。
第3步? ?- 現(xiàn)在,它將計(jì)算聚類(lèi)質(zhì)心。
第4步? ?- 接下來(lái),繼續(xù)迭代以下步驟,直到找到最佳質(zhì)心為止,這是將數(shù)據(jù)點(diǎn)分配給不再變化的群集的情況
? ? ? 4.1 - 首先,將計(jì)算數(shù)據(jù)點(diǎn)和形心之間的平方距離之和。
? ? ? 4.2 - 現(xiàn)在,必須將每個(gè)數(shù)據(jù)點(diǎn)分配給比其他群集(質(zhì)心)更近的群集。
? ? ? 4.3 - 最后,通過(guò)獲取聚類(lèi)的所有數(shù)據(jù)點(diǎn)的平均值來(lái)計(jì)算聚類(lèi)的質(zhì)心。
K均值遵循期望最大化方法來(lái)解決此問(wèn)題,期望步驟用于將數(shù)據(jù)點(diǎn)分配給最近的群集,而最大化步驟用于計(jì)算每個(gè)群集的質(zhì)心。
使用K-means算法時(shí),需要注意以下事項(xiàng)-
在使用包含K-Means的聚類(lèi)算法時(shí),建議對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化,因?yàn)榇祟?lèi)算法使用基于距離的測(cè)量來(lái)確定數(shù)據(jù)點(diǎn)之間的相似性。
由于K-Means的迭代性質(zhì)和質(zhì)心的隨機(jī)初始化,K-Means可能停留在局部最優(yōu)中,而可能不會(huì)收斂于全局最優(yōu)。因此建議使用不同的質(zhì)心初始化。
代碼實(shí)現(xiàn)
以下兩個(gè)實(shí)施K-Means聚類(lèi)算法的示例將幫助無(wú)涯教程更好地理解-
K-Means示例1
這是了解k均值如何工作的簡(jiǎn)單示例。在此示例中,將首先生成包含4個(gè)不同Blob的2D數(shù)據(jù)集,然后將應(yīng)用k-means算法查看輸出。
首先,將從導(dǎo)入必要的包開(kāi)始-
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns; sns.set() import numpy as np from sklearn.cluster import KMeans
以下代碼將生成2D,其中包含四個(gè)Blob-
from sklearn.datasets.samples_generator import make_blobs X, y_true=make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
接下來(lái),以下代碼將幫助可視化數(shù)據(jù)集-
plt.scatter(X[:, 0], X[:, 1], s=20); plt.show()
接下來(lái),使KMeans為對(duì)象,并提供聚類(lèi)數(shù)量,訓(xùn)練模型并按以下方式進(jìn)行預(yù)測(cè)-
kmeans=KMeans(n_clusters=4) kmeans.fit(X) y_kmeans=kmeans.predict(X)
現(xiàn)在,借助以下代碼,可以繪制和可視化由k-means Python估計(jì)器選擇的群集中心-
from sklearn.datasets.samples_generator import make_blobs X, y_true=make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
接下來(lái),以下代碼將幫助可視化數(shù)據(jù)集-
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap=summer) centers=kmeans.cluster_centers_ plt.scatter(centers[:, 0], centers[:, 1], c=blue, s=100, alpha=0.9); plt.show()
K-Means示例2
讓無(wú)涯教程轉(zhuǎn)到另一個(gè)示例,在該示例中,將對(duì)簡(jiǎn)單數(shù)字?jǐn)?shù)據(jù)集應(yīng)用K均值聚類(lèi), K-means將嘗試在不使用原始標(biāo)簽信息的情況下識(shí)別相似的數(shù)字。
首先,將從導(dǎo)入必要的包開(kāi)始-
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns; sns.set() import numpy as np from sklearn.cluster import KMeans
接下來(lái),從sklearn加載數(shù)字?jǐn)?shù)據(jù)集并使其成為對(duì)象。還可以在此數(shù)據(jù)集中找到行數(shù)和列數(shù),如下所示:
from sklearn.datasets import load_digits digits=load_digits() digits.data.shape
(1797, 64)
上面的輸出顯示此數(shù)據(jù)集包含1797個(gè)具有64個(gè)特征的樣本。
可以像上面的示例1一樣執(zhí)行聚類(lèi)-
kmeans=KMeans(n_clusters=10, random_state=0) clusters=kmeans.fit_predict(digits.data) kmeans.cluster_centers_.shape
(10, 64)
上面的輸出顯示K-means創(chuàng)建了具有64個(gè)特征的10個(gè)聚類(lèi)。
fig, ax=plt.subplots(2, 5, figsize=(8, 3)) centers=kmeans.cluster_centers_.reshape(10, 8, 8) for axi, center in zip(ax.flat, centers): axi.set(xticks=[], yticks=[]) axi.imshow(center, interpolation=nearest, cmap=plt.cm.binary)
作為輸出,將獲得以下圖像,該圖像顯示了通過(guò)k均值學(xué)習(xí)的聚類(lèi)中心。
以下代碼行將學(xué)習(xí)到的集群標(biāo)簽與在其中找到的真實(shí)標(biāo)簽匹配:
from scipy.stats import mode labels = np.zeros_like(clusters) for i in range(10): mask = (clusters == i) labels[mask] = mode(digits.target[mask])[0]
接下來(lái),無(wú)涯教程可以檢查準(zhǔn)確性,如下所示:
from sklearn.metrics import accuracy_score accuracy_score(digits.target, labels)
0.7935447968836951
上面的輸出顯示精度約為80%。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-682517.html
聚類(lèi)算法 - K-Means - 無(wú)涯教程網(wǎng)無(wú)涯教程網(wǎng)提供K-均值聚類(lèi)算法計(jì)算質(zhì)心并進(jìn)行迭代,直到找到最佳質(zhì)心為止,它假定群集的數(shù)目是已知的...https://www.learnfk.com/python-machine-learning/machine-learning-with-python-clustering-algorithms-k-means.html文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-682517.html
到了這里,關(guān)于無(wú)涯教程-聚類(lèi)算法 - K-Means的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!