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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章