1. 程式人生 > 其它 >k-prototypes聚類演算法

k-prototypes聚類演算法

1 k-prototypes聚類

https://github.com/nicodv/kmodes.git

1 k-prototypes演算法

K-prototype是K-means與K-modes的一種集合形式,適用於數值型別字元型別集合的混合型資料。

k-prototypes演算法在聚類的過程中,是將資料的數值型變數和類別型變數拆開,分開計算樣本間變數的距離,再將兩者相加,視為樣本間的距離。

k-prototypes聚類的準則就是使用一個合適的損失函式去度量數值型和分類變數對原型的距離;

2 k-prototypes演算法步驟

1.隨機選取k個初始原型(中心點);

2.針對資料集中的每個樣本點,計算樣本點與k個原型的距離(數值型變數計算歐氏距離,類別型變數計算漢明距離),將樣本點劃分到離它最近的中心點所對應的類別中;

3.類別劃分完成後,重新確定類別的原型,數值型變數樣本取值的均值作為新的原型的特徵取值,類別型變數樣本取值的眾數作為新的原型的特徵取值;

4.重複步驟2 3,直到沒有樣本改變類別,返回最後的聚類結果。

3 聚類演算法api

3.1 api介紹

from kmodes.kprototypes import KPrototypes
  • KPrototypes(n_clusters=8)

    • 引數:
      • n_clusters:開始的聚類中心數量
        • 整型,預設值=8,生成的聚類數,即產生的質心(centroids)數。
      • n_init :預設值:10
        k-mode 演算法將以不同的方式執行的次數質心種子。最終結果將是最好的輸出n_init 在成本方面連續執行。
      • init : {'Huang', 'Cao', 'random' 或 ndarrays 列表},預設值:'Cao'
        初始化方法:
        '黃':黃的方法 [1997, 1998]
        '曹':曹等人的方法。 [2009]
        'random':從隨機選擇'n_clusters'觀察(行)
        初始質心的資料。
        如果傳遞了 ndarrays 列表,則它的長度應為 2,其中
        數字和分類的形狀(n_clusters,n_features)
        資料分別。這些是初始質心。
      • verbose
    • 方法:
      • estimator.fit(x)
      • estimator.predict(x)
      • estimator.fit_predict(x)
        • 計算聚類中心並預測每個樣本屬於哪個類別,相當於先呼叫fit(x),然後再呼叫predict(x)

3.2 步驟分析

  • 1.獲取資料
  • 2.資料基本處理
    • 2.1 確定特徵值,目標值
    • 2.2 缺失值處理
    • 2.3 資料集劃分
  • 3.特徵工程(特徵值處理)
  • 4.機器學習
  • 5.模型評估

4 聚類演算法如何選出最佳k值

手肘法(elbow method)
手肘法的核心指標是SSE(sum of the squared errors,誤差平方和),

簡單說,加入k值=1, 那麼誤差會極大,加入k值趨向於樣本量,那麼每一個樣本點就是一個簇,那肯定沒有誤差,但是脫離聚類演算法本意。我們想找的,就是隨著k值不斷增加,誤差越來越小,到底達到那個k值的時候,誤差平方SSE會開始不再“明顯大幅度降低”,而趨於平緩。這個圖做出來就像一個手肘一樣,因此叫手肘法。

5 模型的儲存和載入

5.1 模型的儲存和載入API

sklearn.externals.joblib函式是用在0.21及以前的版本中,在最新的版本中,該函式應被棄用

安裝:pip install joblib

import joblib
# 4.3 模型儲存
joblib.dump(estimator, './test.pkl')  # estimator: 指的是訓練好的模型例項(評估器)
# 4.4 模型載入
estimator = joblib.load("./test.pkl")
  • 儲存:joblib.dump(estimator, 'test.pkl')
  • 載入:estimator = joblib.load('test.pkl')