详解聚类算法Kmeans-重要参数init & random_state & n_init:初始质心怎么放更好菜菜的sklearn课堂笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解聚类算法Kmeans-重要参数init & random_state & n_init:初始质心怎么放更好菜菜的sklearn课堂笔记相关的知识,希望对你有一定的参考价值。

init

在K-Means中有一个重要的环节,就是放置初始质心。如果有足够的时间,K-means一定会收敛,但Inertia可能收敛到局部最小值。是否能够收敛到真正的最小值很大程度上取决于质心的初始化。init就是用来帮助我们决定质心初始放置位置的参数。 初始质心放置的位置不同,聚类的结果很可能也会不一样,一个好的质心选择可以让K-Means避免更多的计算,让算法收敛稳定且更快。 在之前讲解初始质心的放置时,我们是使用”随机“的方法在样本点中抽取k个样本作为初始质心,这种方法显然不符合”稳定且更快“的需求。为此,我们可以使用random_state参数来控制每次生成的初始质心都在相同位置,甚至可以画学习曲线来确定最优的random_state是哪个整数。一个random_state对应一个质心随机初始化的随机数种子。如果不指定随机数种子,则sklearn中的K-means并不会只选择一个随机模式扔出结果,而会在每个随机数种子下运行多次,并使用结果最好的一个随机数种子来作为初始质心。我们可以使用参数n_init来选择,每个随机数种子下运行的次数。这个参数不常用到,默认10次,如果我们希望运行的结果更加精确,那我们可以增加这个参数n_init的值来增加每个随机数种子下运行的次数。 然而这种方法依然是基于随机性的。 为了优化选择初始质心的方法,2007年Arthur, David, and Sergei Vassilvitskii三人发表了论文“k-means++: The advantages of careful seeding”,他们开发了”k-means ++“初始化方案,使得初始质心(通常)彼此远离,以此来引导出比随机初始化更可靠的结果。在sklearn中,我们使用参数init =k-means ++来选择使用k-means ++作为质心初始化的方案。通常来说,建议保留默认的"k-means++"的方法。

KMeans(
    [n_clusters=8, *, "init=k-means++", n_init=10, max_iter=300, tol=0.0001, "precompute_distances=deprecated", verbose=0, random_state=None, copy_x=True, "n_jobs=deprecated", "algorithm=auto"],
)
# init:可输入"k-means++","random"或者一个n维数组。这是初始化质心的方法,默认"k-means++"。如果输入了n维数组,数组的形状应该是(n_clusters,n_features)并给出初始质心。
# random_state:控制每次质心随机初始化的随机数种子
# n_init:整数,默认10,使用不同的质心随机初始化的种子来运行k-means算法的次数。最终结果会是基于Inertia来计算的n_init次连续运行后的最佳输出
from sklearn.metrics import silhouette_samples,silhouette_score
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd

X,y = make_blobs(n_samples=50000,n_features=10,centers=5)

plus = KMeans(n_clusters=10,random_state=420).fit(X)
plus.n_iter_ # 迭代次数
# 一般而言KMeans++,也就是默认的init参数,运行速度快且迭代次数少
---
18

random = KMeans(n_clusters=10,init=random,random_state=420).fit(X)
random.n_iter_
---
23

以上是关于详解聚类算法Kmeans-重要参数init & random_state & n_init:初始质心怎么放更好菜菜的sklearn课堂笔记的主要内容,如果未能解决你的问题,请参考以下文章

机器学习——详解经典聚类算法Kmeans

基于R语言的Kmeans聚类算法

详解 kmeans 聚类算法

大数据十大经典算法之k-means

R语言KMeans聚类模型示例

R-kmeans聚类算法