一、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)