1 k-prototypes聚类
https://github.com/nicodv/kmodes.git
1 k-prototypes算法
K-prototype是K-means与K-modes的一种集合形式,适用于数值类型
与字符类型
集合的混合型数据。
k-prototypes算法在聚类的过程中,是将数据的数值型变量和类别型变量拆开,分开计算样本间变量的距离,再将两者相加,视为样本间的距离。
k-prototypes聚类的准则就是使用一个合适的损失函数去度量数值型和分类变量对原型的距离;
2 k-prototypes算法步骤
1.随机选取k个初始原型(中心点);
2.针对数据集中的每个样本点,计算样本点与k个原型的距离(数值型变量计算欧氏距离,类别型变量计算汉明距离),将样本点划分到离它最近的中心点所对应的类别中;
3.类别划分完成后,重新确定类别的原型,数值型变量样本取值的均值作为新的原型的特征取值,类别型变量样本取值的众数作为新的原型的特征取值;
4.重复步骤2 3,直到没有样本改变类别,返回最后的聚类结果。
3 聚类算法api
3.1 api介绍
from kmodes.kprototypes import KPrototypes
-
KPrototypes(n_clusters=8)
- 参数:
- n_clusters:开始的聚类中心数量
- 整型,缺省值=8,生成的聚类数,即产生的质心(centroids)数。
- n_init :默认值:10
k-mode 算法将以不同的方式运行的次数质心种子。最终结果将是最好的输出n_init 在成本方面连续运行。 - init : {'Huang', 'Cao', 'random' 或 ndarrays 列表},默认值:'Cao'
初始化方法:
'黄':黄的方法 [1997, 1998]
'曹':曹等人的方法。 [2009]
'random':从随机选择'n_clusters'观察(行)
初始质心的数据。
如果传递了 ndarrays 列表,则它的长度应为 2,其中
数字和分类的形状(n_clusters,n_features)
数据分别。这些是初始质心。 - verbose
- n_clusters:开始的聚类中心数量
- 方法:
- estimator.fit(x)
- estimator.predict(x)
- estimator.fit_predict(x)
- 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)
- 参数:
3.2 步骤分析
- 1.获取数据
- 2.数据基本处理
- 2.1 确定特征值,目标值
- 2.2 缺失值处理
- 2.3 数据集划分
- 3.特征工程(特征值处理)
- 4.机器学习
- 5.模型评估
4 聚类算法如何选出最佳k值
手肘法(elbow method)
手肘法的核心指标是SSE(sum of the squared errors,误差平方和),
简单说,加入k值=1, 那么误差会极大,加入k值趋向于样本量,那么每一个样本点就是一个簇,那肯定没有误差,但是脱离聚类算法本意。我们想找的,就是随着k值不断增加,误差越来越小,到底达到那个k值的时候,误差平方SSE会开始不再“明显大幅度降低”,而趋于平缓。这个图做出来就像一个手肘一样,因此叫手肘法。
5 模型的保存和加载
5.1 模型的保存和加载API
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")
- 保存:joblib.dump(estimator, 'test.pkl')
- 加载:estimator = joblib.load('test.pkl')