算法原理
K均值聚类(K-Means)算法的核心步骤如下:
- 将数据集{D}中随机取K个元素,作为K个簇的各自的中心。
- 分别计算剩下的元素到K个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
- 根据聚类结果,重新计算K个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
- 将{D}中全部元素按照新的中心重新聚类。
- 重复第 4 步,直到每个簇的中心基本不再变化。
- 将结果输出。
K均值聚类(K-Means)算法的特点如下:
- 计算伸缩性: 算法复杂度不高,算法收敛速度快,聚类效果好;
- 参数依赖性: 可控制的参数较少(仅簇数k), 调参简单;
- 普适性能力: 泛化能力一般,容易受到噪音干扰;
- 抗噪音能力: 需要考虑局部最优问题,异常数据干扰问题等;
- 结果解释性: 模型和结果均具有解释性。
sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm=’auto’)
主要参数含义:
- n_clusters: 即k值,一般需要多试一些值以获得较好的聚类效果。
- max_iter: 最大的迭代次数,一般如果是凸数据集的话可以不管这个值,如果数据集不是凸的,可能很难收敛,此时可以指定最大的迭代次数让算法可以及时退出循环。
- n_init:用不同的初始化质心运行算法的次数。由于K-Means是结果受初始值影响的局部最优的迭代算法,因此需要多跑几次以选择一个较好的聚类效果,默认是10,一般不需要改。如果你的k值较大,则可以适当增大这个值。
- init: 即初始值选择的方式,可以为完全随机选择’random’,优化过的’k-means++’或者自己指定初始化的k个质心。一般建议使用默认的’k-means++’。
- algorithm:有“auto”, “full” or “elkan”三种选择。”full”就是我们传统的K-Means算法, “elkan”是elkan K-Means算法。默认的”auto”则会根据数据值是否是稀疏的,来决定如何选择”full”和“elkan”。一般数据是稠密的,那么就是 “elkan”,否则就是”full”。一般来说建议直接用默认的”auto”。
- n_jobs:并发次数。
from sklearn import datasets
iris = datasets.load_iris()
iris_data = iris.data
print(iris_data)
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[6.5, 3. , 5.2, 2. ],
[6.2, 3.4, 5.4, 2.3],
[5.9, 3. , 5.1, 1.8]])
#归一化
from sklear