首頁  >  文章  >  後端開發  >  Python中的K-means++演算法詳解

Python中的K-means++演算法詳解

PHPz
PHPz原創
2023-06-10 20:25:441815瀏覽

K-means演算法是一種常見的無監督學習演算法,用於將資料聚類成不同的類別。 K-means 演算法是K-means演算法的改進版本,旨在提高初始聚類中心選擇的效率和準確性。本文將詳細介紹Python中的K-means 演算法的原理、程式碼實作和應用。

  1. K-means演算法概述

K-means演算法是迭代演算法,每次迭代的過程為:首先隨機選取K個初始聚類中心,然後將每個資料點分配到離其最近的初始聚類中心所在的類別中,接著重新計算所有聚類的中心,並更新聚類中心。重複上述過程直至滿足收斂條件。

K-means的演算法流程:

  1. 隨機從資料中選取K個資料點作為初始聚類中心。
  2. 將資料點指派到距離其最近的聚類中心所在的聚類中。
  3. 重新計算每個聚類的中心。
  4. 重複2-3,直到滿足收斂條件(聚類中心不再改變、達到最大迭代次數等)。
  5. K-means 演算法步驟

K-means 演算法是K-means演算法的改進版本,主要在初始聚類中心的選擇上做了最佳化。 K-means 演算法的初始聚類中心選擇步驟如下:

  1. #隨機選擇一個資料點作為第一個聚類中心。
  2. 對於每個資料點,計算它與最近的聚類中心的距離D(x)。
  3. 隨機選擇一個資料點作為下一個聚類中心,要保證這個點與已有的聚類中心的距離越大,被選中的機率越大:
    a. 計算每個資料點與已有聚類中心的最近距離D(x)^2。
    b. 計算所有D(x)^2的和Sum(D(x)^2)。
    c. 依照每個資料點與已有聚類中心的最近距離所佔比例為其賦權重,機率為D(x)^2/Sum(D(x)^2)。
    d. 從依照上述機率進行抽樣,選擇一個資料點作為下一個聚類中心。
  4. 重複步驟3,直到選取K個聚類中心。
  5. Python實作K-means 演算法

下面,我們將透過Python實作K-means 演算法。

首先,導入必要的函式庫:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

接著,我們產生一組用於聚類的資料:

n_samples = 1500
random_state = 170
X, y = make_blobs(n_samples=n_samples, random_state=random_state)

然後,我們透過sklearn的KMeans模組來訓練K-means 模型:

kmeans = KMeans(init="k-means++", n_clusters=3, n_init=10)
kmeans.fit(X)

最後,我們將聚類結果視覺化:

plt.figure(figsize=(12, 12))
h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.imshow(Z, interpolation="nearest",
          extent=(xx.min(), xx.max(), yy.min(), yy.max()),
          cmap=plt.cm.Pastel1, aspect="auto", origin="lower")
plt.scatter(X[:, 0], X[:, 1], s=30, c=kmeans.labels_, cmap=plt.cm.Paired)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
            marker="^", s=100, linewidths=3,
            color='black', zorder=10)
plt.title("K-means++ clustering")
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()
  1. K-means 演算法應用場景

K-means演算法適用於沒有標籤資訊的資料聚類問題。 K-means 演算法相較於K-means演算法,為確保初始聚類中心的合理性和獨特性,更適用於資料較多或資料分佈較分散的情況下。

K-means 演算法可以用於資料探勘、影像處理、自然語言處理等領域。可以利用聚類演算法找出相似性較高的樣本,對於大數據的視覺化也有很好的應用。

總之,K-means 演算法在資料探勘、聚類分析、影像辨識、自然語言處理等領域都有很好的應用前景。

以上是Python中的K-means++演算法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn