韩城建设公司网站,自己开发app所需的各种费用,wordpress插件用户权限,专门做汽车gps贷款网站k-means k-means算法介绍 k-means算法介绍
K-means算法是一种用于聚类的迭代算法#xff0c;它将数据集划分为K个簇#xff0c;其中每个数据点属于与其最近的簇的中心。这个算法的目标是最小化簇内的平方和误差#xff08;簇内数据点与簇中心的距离的平方和#xff09;。 … k-means k-means算法介绍 k-means算法介绍
K-means算法是一种用于聚类的迭代算法它将数据集划分为K个簇其中每个数据点属于与其最近的簇的中心。这个算法的目标是最小化簇内的平方和误差簇内数据点与簇中心的距离的平方和。
以下是K-means算法的基本步骤 初始化中心点 随机选择K个数据点作为初始的簇中心点。 分配数据点 对于每个数据点计算它与各个簇中心的距离并将其分配给距离最近的簇。 更新簇中心 对每个簇计算其所有数据点的平均值将该平均值作为新的簇中心。
重复步骤2和步骤3 重复执行步骤2和步骤3直到簇中心不再发生显著变化或达到预定的迭代次数。
收敛 算法收敛于一组簇中心每个数据点属于与其最近的中心。
import numpy as np
import matplotlib.pyplot as pltdef kmeans(X, k, max_iters100, tol1e-4):# 初始化簇中心centroids X[np.random.choice(len(X), k, replaceFalse)]for _ in range(max_iters):# 计算每个点到簇中心的距离distances np.linalg.norm(X[:, np.newaxis] - centroids, axis2)# 分配每个点到最近的簇labels np.argmin(distances, axis1)# 计算新的簇中心new_centroids np.array([X[labels z].mean(axis0) for z in range(k)])# 判断是否收敛if np.linalg.norm(new_centroids - centroids) tol:breakcentroids new_centroidsreturn centroids, labels# 生成一些随机样本数据
np.random.seed(42)
X, _ make_blobs(n_samples300, centers4, random_state42, cluster_std1.0)# 使用自己实现的K-means算法进行聚类
centroids, labels kmeans(X, k4)# 绘制原始数据和簇中心
plt.scatter(X[:, 0], X[:, 1], clabels, cmapviridis, edgecolorsk, s50, alpha0.7)
plt.scatter(centroids[:, 0], centroids[:, 1], markerX, s200, linewidths3, colorr, labelCentroids)
plt.title(K-means Clustering (Implemented))
plt.legend()
plt.show()