為什么要用k-modes算法
k-means算法是一種簡單且實用的聚類算法,但是傳統的k-means算法只適用於連續屬性的數據集(數值型數據),而對於離散屬性的數據集,計算簇的均值以及點之間的歐式距離就變得不合適了。k-modes作為k-means的一種擴展(變種),距離使用漢明距離,適用於離散屬性的數據集。
k-modes算法介紹
K-modes是數據挖掘中針對分類屬性型數據進行聚類采用的方法,其算法思想比較簡單,時間復雜度也比K-means、K-medoids低,大致思想如下:
假設有N個樣本,M個屬性且全是離散的,簇的個數為k
算例
code-Python
import numpy as np
from kmodes import kmodes
'''生成互相無交集的離散屬性樣本集'''
data1 = np.random.randint(1,6,(10000,10))
data2 = np.random.randint(6,12,(10000,10))
data = np.concatenate((data1,data2))
'''進行K-modes聚類'''
km = kmodes.KModes(n_clusters=2)
clusters = km.fit_predict(data)
'''計算正確歸類率'''
score = np.sum(clusters[:int(len(clusters)/2)])+(len(clusters)/2-np.sum(clusters[int(len(clusters)/2):]))
score = score/len(clusters)
if score >= 0.5:
print('正確率:'+ str(score))
else:
print('正確率:'+ str(1-score))
參考
https://blog.csdn.net/tyh70537/article/details/78158674
https://www.cnblogs.com/feffery/p/8604530.html