K 平均數叢集的運作方式 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

K 平均數叢集的運作方式

K 平均數是一種演算法,會訓練模型將類似的物件分為同組。k 平均值演算法的做法是將輸入資料集的每個觀察項映射到 n 維空間中的一點 (n 為觀察的屬性數量)。舉例而言,您的資料集可能有對特定位置的溫度和濕度的觀察,其中的觀察即會對應至 2 維空間的點 (t, h)。

注意

叢集演算法並未監督。在未受監督的學習情況下,標籤可能會與訓練資料集內未使用的物件建立關聯。如需詳細資訊,請參閱 非監督式學習

在 K 平均數叢集中,各叢集都有一個中心。在模型訓練其間,K 平均數演算法建立叢集的基礎,是運用與資料集內的觀察相對應的點與叢集中心之間的距離。您選擇要建立的叢集數量 (k)。

舉例而言,假設您想要建立一個可辨識手寫數字的模型,而選擇以 MNIST 資料集來進行訓練。該資料集提供了數千張手寫數字 (0 到 9) 的影像。在此例中,您大概會選擇建立 10 個叢集,一個叢集代表一個數字 (0、1、…、9)。做為模型訓練的一環,K 平均數演算法會將輸入的圖片分為 10 個叢集。

MNIST 資料集中的每張圖片都是 28x28 像素的影像,共有 784 像素。每張圖片對應至 784 維空間中的一個點,類似於 2 維空間中的點 (x、y)。為了找出某個點所屬的叢集,K 平均數演算法會找出該點與所有叢集中心之間的距離。接下來便選擇最靠近的叢集中心所在的叢集做為該圖片所屬的叢集。

注意

Amazon SageMaker 使用演算法的自訂版本,您可以選擇透過指定額外的叢集中心 (K = k*x) 來改善模型準確性,而不是指定演算法建立 k 個叢集。不過,演算法最終會將數量縮減至 k 個叢集。

在中 SageMaker,您可以指定建立訓練工作時的叢集數目。如需詳細資訊,請參閱 CreateTrainingJob。需在請求內文中新增 HyperParameters 字串對應,以指定 kextra_center_factor 字串。

以下是 k-means 如何用於模型訓練的摘要: SageMaker

  1. 決定初始的 K 個叢集中心。

    注意

    在下列主題中,K 個叢集表示 k * xkx 是在建立訓練任務模型時所指定。

  2. 演算法會逐一查看訓練資料,並重新計算叢集中心。

  3. 其會將生成的叢集數量縮減為 k (若資料科學家已在請求中指定建立 k*x 個叢集)。

以下幾節亦會說明當資料科學家將模型訓練工作當成 HyperParameters 字串對應的一環,在進行設定時所會指定的部分參數。

步驟 1:決定初始的叢集中心

在中使用 k-means 時 SageMaker,會從小型隨機採樣批次的觀測中選擇初始叢集中心。需選擇以下其中一種策略,來判斷初始叢集中心的選擇方式:

  • 隨機方法——隨機選擇輸入資料集中的 K 觀察值做為叢集中心。舉例而言,您可能會選出一個指向 784 維空間的叢集中心,對應至 MNIST 訓練資料集內任 10 張圖片。

  • K 平均數++ 方式,運作模式如下:

    1. 先從一個叢集開始,指定其中心。您會從訓練資料集中隨機選取一個觀察項,使用對應至該觀察項的點做為叢集中心。比方在 MNIST 資料集中隨機選擇一張手寫數字的圖片。然後再選擇在 784 維空間內與該圖相對應的點做為叢集中心。這就是叢集中心 1。

    2. 決定叢集 2 的中心。此時再從訓練資料集內剩下的觀察中,隨機挑出一項觀察。所選的點必須與先前所遠的不同。這項觀察要對應到與叢集中心 1 距離遙遠的一點。以 MNIST 資料集為例,需執行下列動作:

      • 找出剩下的每張圖片所對應的點與叢集中心 1 之間的距離。將該距離乘以平方,並指定一個與距離平方成正比的概率。以此方式,與先前所選的不同的圖片,就會有比較高的構率被選為叢集中心 2。

      • 根據上一步所指定的概率,隨機選擇其中一個圖片。對應至該圖的點就是叢集中心 2。

    3. 重複步驟 2,再找出叢集中心 3。這時需找出剩餘圖片與叢集中心 2 之間的距離。

    4. 重複此程序,直到出現 K 個叢集中心為止。

若要在中訓練模型 SageMaker,您可以建立訓練工作。在此請求中,需指定 HyperParameters 字串對應,來提供組態資訊:

  • 為了指定所要建立的叢集數量,請新增 k 字串。

  • 為了提高準確度,可選擇加入 extra_center_factor 字串。

  • 為了指定想要用來判斷初始叢集中心的策略,請加入 init_method 字串,並將其值設為 randomk-means++

如需 SageMaker k 均值估算器的詳細資訊,請參閱 Amazon SageMaker Python 開發套件文件中的 K- 均值。

您現在已有一組初始的叢集中心。

步驟 2:逐一查看訓練資料集並計算叢集中心

前一步驟中建立的叢集中心大多為隨機產生,有針對訓練資料集略作考量。在此步驟中,要使用訓練資料集,將這些中心往真正得叢集中心移動。此演算法會逐一查看訓練資料集,並重新計算 K 個叢集中心。

  1. 從訓練資料集中讀取微批次的觀察 (由所有記錄中隨機選取的少量子集),並進行以下事項。

    注意

    建立模型訓練工作時,要在 mini_batch_size 字串對應中的 HyperParameters 字串指定批次的大小。

    1. 將微批次中的所有觀察分配到叢集中心距離最近的叢集。

    2. 計算分配給各叢集的觀察的數量。再計算分配給各叢集的新點比例。

      例如請試想有下列叢集:

      叢集 c1 = 100 個先分配的點。您在此步驟中從微批次內新增了 25 個點。

      叢集 c2 = 150 個先分配的點。您在此步驟中從微批次內新增了 40 個點。

      叢集 c3 = 450 個先分配的點。您在此步驟中從微批次內新增了 5 個點。

      計算分配給各叢集的新點比例,如下所示:

      p1 = proportion of points assigned to c1 = 25/(100+25) p2 = proportion of points assigned to c2 = 40/(150+40) p3 = proportion of points assigned to c3 = 5/(450+5)
    3. 計算新增至各叢集的新點的中心:

      d1 = center of the new points added to cluster 1 d2 = center of the new points added to cluster 2 d3 = center of the new points added to cluster 3
    4. 計算加權平均值,以找出新的叢集中心,如下所示:

      Center of cluster 1 = ((1 - p1) * center of cluster 1) + (p1 * d1) Center of cluster 2 = ((1 - p2) * center of cluster 2) + (p2 * d2) Center of cluster 3 = ((1 - p3) * center of cluster 3) + (p3 * d3)
  2. 讀取下一批微批次,重複步驟 1,重新計算叢集中心。

  3. 如需微批次 k 平均數的詳細資訊,請參閱 Web-Scale k-means Clustering)。

步驟 3:將叢集數量從 K 縮減至 k

若演算法建立了 K 個叢集 ((K = k*x) 其中 x 大於 1) 則會再將 K 個叢集縮減為 k 個叢集。(如需詳細資訊,請參閱上述討論中的 extra_center_factor。) 其做法是 Lloyd 方法加 kmeans++ 初始化,套用到 K 個叢集中心。如需 Lloyd 方法的詳細資訊,請參閱 k 平均值叢集化