https://github.com/nicodv/kmodes.git
K-prototype是K-means与K-modes的一种集合形式,适用于数值类型
与字符类型
集合的混合型数据。
k-prototypes算法在聚类的过程中,是将数据的数值型变量和类别型变量拆开,分开计算样本间变量的距离,再将两者相加,视为样本间的距离。
k-prototypes聚类的准则就是使用一个合适的损失函数去度量数值型和分类变量对原型的距离;
1.随机选取k个初始原型(中心点);
2.针对数据集中的每个样本点,计算样本点与k个原型的距离(数值型变量计算欧氏距离,类别型变量计算汉明距离),将样本点划分到离它最近的中心点所对应的类别中;
3.类别划分完成后,重新确定类别的原型,数值型变量样本取值的均值作为新的原型的特征取值,类别型变量样本取值的众数作为新的原型的特征取值;
4.重复步骤2 3,直到没有样本改变类别,返回最后的聚类结果。
from kmodes.kprototypes import KPrototypes
KPrototypes(n_clusters=8)
手肘法(elbow method)
手肘法的核心指标是SSE(sum of the squared errors,误差平方和),
简单说,加入k值=1, 那么误差会极大,加入k值趋向于样本量,那么每一个样本点就是一个簇,那肯定没有误差,但是脱离聚类算法本意。我们想找的,就是随着k值不断增加,误差越来越小,到底达到那个k值的时候,误差平方SSE会开始不再“明显大幅度降低”,而趋于平缓。这个图做出来就像一个手肘一样,因此叫手肘法。
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")