import random
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据集(100个二维数据)
X = []
for _ in range(100):
x = random.random()
y = random.random()
X.append([x, y])
# 创建一个聚类器并训练模型(分成3类)
kmeans = KMeans(n_clusters=3, random_state=215275).fit(X)
# 获取聚类结果(标签和中心)
labels = kmeans.labels_
centers = kmeans.cluster_centers_
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='x', color='red')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('K-means Clustering')
plt.show()
心得:
1.sklearn.cluster 模块提供了多种聚类算法的实现,以上代码是调用cluster中的kmeans算法.
2.KMeans有这些参数:
n_clusters:整数值,指定要聚类的簇的数量。
init:字符串或可调用对象,指定初始化质心的方法。默认为 "k-means++",表示使用智能初始方法。也可以使用字符串 "random" 表示随机初始化,或者传递一个自定义初始化方法。
n_init:整数值,指定多次重新初始化的次数。每次重新初始化都会运行完整的 K-means 算法,并返回最好的结果。默认为 10。
max_iter:整数值,指定最大迭代次数,即运行算法的最大迭代次数。默认为 300。
tol:浮点数值,指定收敛的阈值。当连续两次迭代之间的平均质心移动小于该值时,算法被认为已经收敛。默认为 1e-4。
algorithm:字符串,指定计算簇质心的算法。可以是 "auto"(自动选择最适合的算法),"full"(使用传统的 K-means 算法),或 "elkan"(使用更快的 Elkan 算法)。默认为 "auto"。
random_state:整数值或 RandomState 实例,指定随机数生成器的种子。
verbose:整数值,控制详细程度输出的冗余程度。默认为 0,表示不输出任何信息。
3.聚类的最好展示方式就是通过matplotlib绘图展示。