kmeans聚类算法python3.8实现
时间: 2025-04-08 22:23:12 浏览: 29
### 使用 Python 3.8 实现 KMeans 聚类算法
以下是基于 Python 3.8 的 KMeans 聚类算法实现方法及其代码示例:
#### 手动实现 KMeans 算法
手动编写 KMeans 算法的核心逻辑涉及初始化质心、计算欧几里得距离以及迭代更新簇分配和质心位置。
```python
import numpy as np
def kmeans(data, k, max_iterations=100, tolerance=1e-4):
# 初始化k个随机质心
centroids = data[np.random.choice(range(len(data)), size=k, replace=False)]
for _ in range(max_iterations):
clusters = {i: [] for i in range(k)} # 存储每个簇中的数据点
# 将每个数据点分配到最近的质心所在的簇
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
prev_centroids = centroids.copy() # 记录之前的质心位置
# 更新质心为当前簇中所有点的均值
for i in range(k):
if clusters[i]: # 如果该簇有数据点,则重新计算质心
centroids[i] = np.mean(clusters[i], axis=0)
# 判断质心变化是否小于容忍阈值
centroid_shifts = np.linalg.norm(centroids - prev_centroids, axis=1)
if all(shift < tolerance for shift in centroid_shifts):
break
return centroids, clusters
# 测试数据
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
k = 2
final_centroids, final_clusters = kmeans(data, k)
print("Final Centroids:")
for idx, centroid in enumerate(final_centroids):
print(f"Centroid {idx}: {centroid}")
print("\nClusters:")
for key, value in final_clusters.items():
print(f"Cluster {key}: {value}")
```
上述代码实现了基本的 KMeans 算法,其中 `k` 表示期望的簇数量[^1]。通过不断调整质心的位置并重新分配数据点至对应的簇,最终达到收敛状态。
---
#### 基于 sklearn 库实现 KMeans 算法
如果希望快速应用成熟的库函数,可以利用 `scikit-learn` 提供的 `KMeans` 类完成聚类操作。
```python
from sklearn.cluster import KMeans
import numpy as np
# 创建测试数据
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
# 定义模型参数
model = KMeans(n_clusters=2, random_state=42)
# 模型训练
model.fit(data)
# 获取聚类结果
labels = model.labels_ # 数据点所属的簇编号
centroids = model.cluster_centers_ # 各簇的质心坐标
print("Labels:", labels)
print("Centroids:\n", centroids)
```
此代码片段展示了如何借助 `scikit-learn` 中的 `KMeans` 方法高效地执行聚类任务[^2]。它自动处理了初始质心的选择、迭代优化过程以及其他细节配置。
---
#### 关键概念解析
为了更好地理解 KMeans 算法的工作原理,需注意以下几个方面:
1. **相似性的度量方式**
在 KMeans 中,默认采用欧几里得距离作为衡量两个数据点之间相似性的标准[^3]。
2. **质心的作用**
质心代表了一个簇内的平均特征向量,在每次迭代过程中都会动态更新以反映最新分布情况。
3. **终止条件**
当质心的变化幅度低于设定的阈值或达到最大允许迭代次数时,算法停止运行。
---
阅读全文
相关推荐


















