k均值聚类python代码
以下是一个简单的k均值聚类Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 定义k均值聚类函数
def kmeans(X, k, max_iters=100):
# 随机初始化k个中心点
centers = X[np.random.choice(len(X), k, replace=False)]
for i in range(max_iters):
# 计算每个样本到中心点的距离
distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
# 分配每个样本到最近的中心点
labels = np.argmin(distances, axis=0)
# 更新中心点
for j in range(k):
centers[j] = X[labels == j].mean(axis=0)
return labels, centers
# 调用k均值聚类函数
labels, centers = kmeans(X, k=3)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='r')
plt.show()
在这个示例中,我们首先生成了一个包含100个二维随机数据点的数据集。然后,我们定义了一个k均值聚类函数,该函数接受数据集、聚类数和最大迭代次数作为输入,并返回每个样本的标签和聚类中心。在函数内部,我们随机初始化了k个中心点,并在每次迭代中计算每个样本到中心点的距离,然后将每个样本分配到最近的中心点,并更新中心点的位置。最后,我们使用matplotlib库可视化了聚类结果,其中每个聚类用不同的颜色表示,聚类中心用红色星号表示。
接下来我会。
在k均值聚类中,我们需要选择聚类数k。通常情况下,我们可以通过手动选择k或使用一些启发式方法来选择k。例如,我们可以使用肘部法则来选择k,该方法通过绘制聚类数与聚类误差(即每个样本到其所属聚类中心的距离的平方和)之间的关系图来确定最佳聚类数。在图中,我们可以找到一个“肘部”,即聚类误差开始急剧下降的点,该点通常被认为是最佳聚类数。
下面是一个使用肘部法则选择聚类数的示例代码:
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 计算不同聚类数下的聚类误差
errors = []
for k in range(1, 11):
labels, centers = kmeans(X, k)
error = ((X - centers[labels])**2).sum()
errors.append(error)
# 绘制聚类数与聚类误差之间的关系图
plt.plot(range(1, 11), errors)
plt.xlabel('Number of clusters')
plt.ylabel('Error')
plt.show()
在这个示例中,我们首先生成了一个包含100个二维随机数据点的数据集。然后,我们计算了聚类数从1到10的聚类误差,并绘制了聚类数与聚类误差之间的关系图。在图中,我们可以看到聚类误差开始急剧下降的点在k=3处,因此我们可以选择k=3作为最佳聚类数。
希望这个解答能够帮助到你,如果你还有其他问题,请随时提出。