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
- n_clusters:開始的聚類中心數量
- 方法:
- 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')