kmeans聚类算法python实现不使用第三方库
时间: 2024-06-21 16:00:35 浏览: 152
K-means聚类算法是一种常用的无监督机器学习方法,用于将数据集划分为若干个簇(cluster)。在Python中,我们可以手动实现K-means算法,不依赖于任何第三方库。以下是一个简单的步骤说明:
1. **初始化**:
- 首先,随机选择K个点作为初始聚类中心(Centroids)。
- 假设数据集为`data`,每行代表一个样本。
2. **分配到最近的簇**:
- 对于每个数据点,计算其与所有聚类中心之间的欧氏距离。
- 将每个点分配给距离最近的聚类中心所在的簇。
3. **更新聚类中心**:
- 对于每个簇,计算所有属于该簇的数据点的均值,这个均值即为新的聚类中心。
4. **迭代**:
- 重复步骤2和3,直到聚类中心不再改变,或者达到预设的最大迭代次数。
5. **终止条件**:
- 可以设置两个阈值:误差阈值(如聚类中心变化小于某个阈值)或迭代次数阈值。
以下是一个简化的Python代码实现:
```python
import numpy as np
def kmeans(data, k, max_iter=100, tolerance=1e-6):
# 初始化随机聚类中心
centroids = data[np.random.choice(len(data), k, replace=False)]
for _ in range(max_iter):
# 分配数据点到最近的簇
clusters = [[] for _ in range(k)]
for point in data:
distances = np.linalg.norm(point - centroids, axis=1)
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
# 更新聚类中心
new_centroids = [np.mean(cluster, axis=0) for cluster in clusters]
# 检查是否达到收敛条件
if np.linalg.norm(new_centroids - centroids, 'fro') < tolerance:
break
centroids = new_centroids
return clusters, centroids
# 使用数据集
data = ... # 假设这是一个二维的numpy数组
clusters, centroids = kmeans(data, k=3)