元件:K-Means 叢集

本文描述如何在 Azure Machine Learning 設計工具中使用 K-Means 叢集元件,以建立未訓練的 K-Means 叢集模型。

K-means 是最簡單且最廣為人知的非監督式學習演算法。 您可以使用此演算法執行各種機器學習工作,例如:

  • 偵測異常資料
  • 群集文字文件。
  • 在使用其他分類或迴歸方法之前,請先分析資料集。

若要建立群集模型,您需要:

  • 將此元件新增至您的管線。
  • 連接資料集。
  • 設定參數,例如您預期的叢集數目、建立叢集時所使用的距離計量等等。

在設定元件超參數後,您可以將未訓練的模型連接到定型群集模型。 因為 K-means 演算法是非監督式的學習方法,所以標籤資料行可選擇性填寫。

  • 如果您的資料包含標籤,您可以使用標籤值來引導選取叢集,並將模型最佳化。

  • 如果您的資料沒有標籤,則演算法會僅根據資料來建立代表可能類別的叢集。

了解 K-Means 叢集

一般而言,群集會透過反覆運算的技巧,將資料集的案例分組為具有類似特性的叢集。 這些群組對於探索資料、識別資料的異常以及最後產生預測很有幫助。 群集模型也可協助您識別資料集內,可能無法透過瀏覽或一般觀察推論出的關係。 基於這些理由,群集通常用於在機器學習工作的早期階段,以探索資料並發現非預期的相關性。

當使用 K-means 方法設定群集模型時,您必須指定目標數 k 以表示模型中所需的距心數目。 距心是代表每個叢集的點。 K-means 演算法會將叢集內的平方總和降至最低,藉此將每個內送資料點指派給其中一個叢集。

在處理訓練資料時,K-means 演算法會從一組初始隨機選擇的距心開始。 距心會作為叢集的起點,並套用羅依演算法以反覆調整其位置。 在符合下列一或多個條件時,K-means 演算法就會停止組建及調整叢集:

  • 距心穩定,表示個別點的叢集指派不再變更,因此演算法已聚合為解決方案。

  • 演算法會完成執行指定的反覆運算次數。

完成訓練階段之後,您可以使用將資料指派給叢集元件,將新案例指派給您使用 K-means 演算法找到的其中一個叢集。 您可以計算新案例和每個叢集距心之間的距離,以執行叢集指派。 每個新案例都會指派給最接近其距心的叢集。

設定 K-Means 叢集元件

  1. K-Means 叢集元件新增至您的管線。

  2. 若要設定模型的定型方式,請選取 [建立定型模式] 選項。

    • 單一參數:如果您知道要在群集模型中使用的確切參數,便可以提供一組特定值做為引數。
  3. 針對 [距心數目],請輸入演算法要使用的初始距心數目。

    模型不保證會產生確切此數目的叢集。 此演算法會以資料點數目為起點,並反覆測試以找出最佳設定。 您可以參考 sklearn 原始程式碼

  4. [初始化] 屬性用於指定定義初始叢集組態的演算法。

    • 前 N 個:由資料集選擇某初始數目的資料點,並做為初始的平均數。

      此方法也稱為 Forgy 法

    • 隨機:演算法會隨機將資料點放在群集中,然後再計算初始平均數做為群集隨機指派點的距心。

      此方法也稱為「隨機分割」(random partition) 方法。

    • K-Means++:這是初始化群集的預設方法。

      K-means++ 演算法由 David Arthur 和 Sergei Vassilvitskii 於 2007 年提出,可用來避免 K-means 演算法造成的不佳群集。 K-means++ 改良了標準版 K-means,使用其他的方法來選擇初始的群集中心。

  5. 針對 [亂數散播],可選擇性輸入值以做為叢集初始化的種子。 此值對叢集選取可能會有重大影響。

  6. 針對 [計量],選擇要用來測量群集向量之間的距離,或是新的資料點和隨機選擇距心之間距離所使用的函數。 Azure Machine Learning 支援下列叢集距離計量:

    • 歐幾里德:歐幾里得距離通常做為 K-means 群集的群集散佈圖量數。 此為慣用度量,因為它可以將點與距心之間的平均距離縮到最短。
  7. 在 [反覆運算次數] 中,輸入演算法在完成選取距心之前,應該反覆訓練資料的次數。

    您可以調整此參數,以在訓練時間與精確度之間取得平衡。

  8. 針對 [指派標籤模式],選擇一個選項來指定標籤資料行 (如果在資料集內) 的處理方式。

    因為 K-means 叢集是非監督式機器學習方法,因此標籤是選擇性項目。 但是,如果您的資料集已經有標籤資料行,您可以使用這些值來引導叢集選取,也可以指定忽略這些值。

    • 略過標籤資料行:標籤資料行中的值將會忽略,且不會用於組建模型。

    • 填入遺漏值:標籤資料行的值會做為特徵,協助組建叢集。 如果有任何資料列遺漏標籤,則會使用其他特徵來插補此值。

    • 以最接近中心覆寫:標籤資料行值會以預測的標籤值取代,並使用最接近目前距心的點標籤。

  9. 如果要在訓練之前將特徵正規化,請選取 [正規化特徵] 選項。

    如果您在訓練之前套用正規化,資料點會依 MinMaxNormalizer 正規化為 [0,1]

  10. 將模型定型。

    • 如果您將 [建立定型模式] 設定為 [單一參數],請新增已標記的資料集和定型叢集模型元件。

結果

完成模型的設定和訓練之後,您就可以使用模型來產生分數。 不過,有多種方法可以訓練模型,以及查看和使用結果:

在您的工作區中擷取模型的快照

如果您使用定型叢集模型元件:

  1. 選取 [定型叢集模型] 元件,並開啟右側面板。

  2. 選取 [輸出] 索引標籤。選取 [登錄資料集] 圖示以儲存已訓練模型的副本。

儲存的模型代表您儲存模型當下的訓練資料。 如果您稍後更新管線中使用的訓練資料,則不會更新已儲存的模型。

請參閱群集結果資料集

如果您使用定型叢集模型元件:

  1. 定型叢集模型元件上按一下右鍵。

  2. 選取 [視覺化]。

產生最佳群集模型的秘訣

眾所周知,在群集期間使用的「植入」流程對於模型的影響顯著。 植入表示點放入潛在距心的初始位置。

例如,如果資料集包含許多極端值,並選擇了極端值來植入叢集,則沒有其他資料點適合該叢集,且叢集可能變成單一叢集。 也就是說,其中可能只有一個點。

您可以透過幾種方式來避免此問題:

  • 變更距心數目,然後嘗試多個種子值。

  • 建立多個模型、改變計量或反覆運算多次。

一般而言,使用群集模型時,任何指定的設定都可能會產生一組在本機最佳化的叢集。 換句話說,模型所傳回的一組叢集僅適用於目前的資料點,無法通用於其他資料。 如果您使用不同的初始組態,K-means 方法可能會找到不同且更好的組態。

後續步驟

請參閱 Azure Machine Learning 可用的元件集