为什么要用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