sklearn学习笔记4:聚类算法 K-Means

聚类算法在sklearn中有两种表现形式,一种是类(和学过的分类算法及数据预处理方法都一样),需要实例化,训练并使用接口和属性来调用结果。另一种是函数,只需要输入特征矩阵和超参数,即可返回聚类的结果和各种指标

需要注意的是,该模块中实现的算法可以采用不同类型的矩阵作为输入,所有方法都接受形状[n_samples,n_features]标准特征矩阵,这些可以从sklearn.feature_extraction模块中的类中获得

对于亲和力传播,光谱聚类和DBSCAN,还可以输入形状[n_samples,n_samples]的相似性矩阵,我们可以使用sklearn.metrics.pairwise模块中的函数来获取相似性矩阵

Kmeans有损失函数吗?

Kmeans不求解什么参数,它的模型本质也没有在拟合数据,而是在对数据进行一种探索,所以Kmeans不存在损失函数,Inertia更像是Kmeans的模型评估指标,而非损失函数

对比来看,在决策树中,我们有衡量分类效果的指标准确度accuracy,准确度所对应的损失叫做泛化误差,但我们不能通过最小化泛化误差来求解某个模型中需要的信息,我们只是希望模型的效果上表现出来的泛化误差很小。因此,决策树,KNN等算法,是绝对没有损失函数的

在sklearn中,我们无法选择使用的距离,只能使用欧氏距离

和KNN一样,KMeans算法是一个计算成本很大的算法

在实践中,相比起其他聚类算法,Kmeans已经很快了,但它一般找到Inertia的局部最小值

sklearn.cluster.KMeans

1.重要参数n_clusters

是Kmeans中的k,表示我们告诉模型要分几类,默认为8类,但通常我们的聚类结果会是一个小于8的结果

通常在开始聚类之前,我们并不知道n_cluster究竟是多少,因此我们要对它进行探索

2.模型评估指标

①当真实标签已知的时候

互信息分:取值范围在(0,1)之中,越接近1,聚类效果越好,在随机均匀聚类下产生0分

V-measure:取值范围在(0,1)之中,越接近1,聚类效果越好,由于分为同质性和完整性两种度量,可以更仔细地研究,模型到底哪个任务做得不够好。对样本分布没有假设,在任何分布上都可以有不错的表现,在随机均匀聚类下不会产生0分

调整兰德系数:取值在(-1,1)之间,负值象征着簇内的点差异巨大,甚至相互独立,正类的兰德系数比较优秀,越接近1越好。对样本分布没有假设,在任何分布上都可以有不错的表现,尤其在具有“折叠”形状的数据上表现优秀,在随机均匀聚类下产生0分

②当真实标签未知的时候

轮廓系数:取值在(-1,1),取值越接近1表示样本与自己所在的簇中的样本很相似,并且与其他簇中的样本不相似,当样本点与簇外的样本更相似的时候,轮廓系数就为负,当轮廓系数为0时,则代表两个簇中的样本相似度一致,两个簇本应该是一个簇。总结:轮廓系数越接近1越好,负数表示聚类效果非常差

在sklearn中,我们使用模块metrics中的类silhouette_score来计算轮廓系数,它返回的是一个数据集中,所有样本的轮廓系数的均值。还有同在metrics模块中的silhouette_sample,它的参数和轮廓系数一致,但返回的是数据集中每个样本自己的轮廓系数

轮廓系数的缺点:在凸形的类上会表现虚高,比如基于密度进行的聚类,或通过DBSCAN获得的聚类结果,如果使用轮廓系数来衡量,则会表现出比真实聚类效果更高的分数

Calinski-Harabaz Index:越高越好,计算速度快,在凸形数据上也会表现虚高

3.init & random_state & n_init:初始质心怎么放好?

init:可输入“k-means++”,“random”或者一个n维数组,如果输入了n维数组,数组的形状应该是(n_clusters,n_features)并给出初始质心

random_state:控制每次质心随机初始化的随机数种子

n_init:整数,默认10,使用不同的质心随机初始化的种子来运行k-means算法的次数。最终结果会是基于Inertia来计算的n_init次连续运行后的最佳输出

4.max_iter & tol:让迭代停下来

max_iter:整数,默认300,单次运行的k-means算法的最大迭代次数

tol:浮点数,默认1e-4,两次迭代间Inertia下降的量,如果两次迭代之间Inertia下降的值小于tol所设定的值,迭代就会停下

5.函数cluster.k_means

用法和类非常相似,不过函数是输入一系列值,而直接返回结果

一次性地,函数k_means会依次返回质心,每个样本对应的簇的标签,inertia以及最佳迭代次数

你可能感兴趣的:(sklearn,sklearn)