下面是详细讲解“k-means聚类算法与Python实现代码”的完整攻略。
k-means聚类算法是一种常用的无监督学算法,用于将点分成k个簇。该算法的核心思想是最小化数据点与簇中心之间的距离来最佳簇中,从而将数据点分成k个簇。
下面是k-means聚类算法的Python实现代码:
import numpy np
def kmeans(X, k, max_iter=100):
n, m = X.shape
centers = X[np.random.choice(n, k, replace=False)]
for i in range(max_iter):
clusters = [[] for _ in range(k)]
for x in X:
distances = np.linalg.norm(x - centers, axis=1)
cluster = np.argmin(distances)
clusters[cluster].append(x)
new_centers = np.array([np.mean(cluster, axis=0) for cluster in clusters])
if np.allclose(centers, new_centers):
break
centers = new_centers
return centers, clusters
上述代码中,首先导入了numpy库,用于进行数值计算。
然后,定义了一个kmeans函数,函数接受一个数据矩阵X、簇的数量k和最大迭代次数max_iter,返回簇中心和簇的列表。
接着,初始化变量n和m,分别表示数据矩阵X的行数和列数。
然后,随机选择k个数据点作为初始簇中心。
接着,使用循环迭代max_iter次,将数据点分配到最近的簇中心,并计算新的簇中心。
然后,如果新的簇中与旧的簇中心非常接近,则退出循环。
最后,返回簇中心和簇的列表。
下面是一个使用k-means聚类算法将数据点分成两个簇的Python示例:
import matplotlib.pyplot as
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
k = 2
centers, clusters = kmeans(X, k)
for i, cluster in enumerate(clusters):
cluster = np.array(cluster)
plt.scatter(cluster[:, 0], cluster[:, 1], label=f'Cluster {i+1}')
plt.scatter(centers[:, 0], centers[:, 1], marker='x', color='black', label='Centers')
plt.legend()
plt.show()
上述代码中,首先导入了matplotlib库,用于绘制图形。
然后,定义了一个数据矩阵X和簇的数量k。
接着,调用kmeans函数将数据点分成k个簇,并返回中心和簇的列表。
然后,使用for循环遍历簇的列表,使用scatter函数绘制每个簇的数据点。
接着,使用scatter函数绘制簇中心。
最后,使用legend函数显示图例,使用show函数显示图形。
下面是一个使用k-means聚类算法将数据点分成三个簇的Python例:
import matplotlib.pyplot as plt
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
k = 3
centers, clusters = kmeans(X, k)
for i, cluster in enumerate(clusters):
cluster = np.array(cluster)
plt.scatter(cluster[:, 0], cluster[:, 1], label=f'Cluster {i+1}')
plt.scatter(centers[:, 0], centers[:, 1], marker='x', color='black', label='Centers')
plt.legend()
plt.show()
上述代码中,首先导入了matplotlib库,用于绘制图形。
然后,定义了一个数据矩阵X和簇的数量k。
接着,调用kmeans函数将数据点分成k个,并返回簇中心和簇的列表。
然后,使用for循环遍历簇的列表,使用scatter函数绘制每个簇的数据点。
接着,使用scatter函数绘制簇中心。
最后,使用legend函数显示图例,使用show函数显示图形。
k-means聚类法是一种常用的无监督学习算法,用于将数据点分成k个簇。Python中可以使用numpy库中的linalg.norm函数计算数据点与簇中心之间的距离,使用numpy库中的mean函数计算新的簇中心。在实现过程中,需要随机选择k个数据点作为初始簇中心,使用for循环迭代max_iter,将数据点分配到最近的簇中心,并计算新的簇中心。最后,使用matplotlib库绘制数据点和簇中心的点图。
本文链接:http://task.lmcjl.com/news/15066.html