一、k-prototypes算法
k-prototypes算法在聚類的過程中,是將數據的數值型變量和類別型變量拆開,分開計算樣本間變量的距離,再將兩者相加,視為樣本間的距離。
k-prototypes聚類的准則就是使用一個合適的損失函數去度量數值型和分類變量對原型的距離;
二、k-prototypes算法步驟:
1.隨機選取k個初始原型(中心點);
2.針對數據集中的每個樣本點,計算樣本點與k個原型的距離(數值型變量計算歐氏距離,類別型變量計算漢明距離),將樣本點划分到離它最近的中心點所對應的類別中;
3.類別划分完成后,重新確定類別的原型,數值型變量樣本取值的均值作為新的原型的特征取值,類別型變量樣本取值的眾數作為新的原型的特征取值;
4.重復步驟2 3,直到沒有樣本改變類別,返回最后的聚類結果。
三、k-prototypes算法應用:
import pandas as pd import numpy as np from kmodes.kprototypes import KPrototypes #跳過標題行,選取第二列以后的數據 X = np.genfromtxt('xxx.csv', dtype=str,delimiter=',',skip_header=1)[:, 2:] print(X) X[:, 0] = X[:, 0].astype(float) print(X) #設定類簇為3 kproto = KPrototypes(n_clusters=3, init='Cao', verbose=2) #第四列數據(類別類型、3為索引值)進行處理 clusters = kproto.fit_predict(X, categorical=[3]) print(kproto.cluster_centroids_) print(kproto.cost_) print(kproto.n_iter_) lei = [] for c in clusters: #聚類結果存儲到列表中 lei.append(c) #將聚類結果保存到文件中 data = pd.read_csv('xxx.csv',encoding='gbk') data['類別'] = lei data.to_csv('...\xxxx.csv') print(data)