1.数据读取及处理 2.初始化聚类中心(可从样本点中选取) 3.通过计算每个点到每个聚类中心的距离进行分类 4.计算每个类别对应点的坐标均值作为新的聚类中心点 5.重复3-4计算较优的聚类中心点 6.使用5中得到的聚类中心点对数据进行聚类并可视化结果
时间: 2024-02-11 19:03:44 浏览: 62
好的,以下是一个简单的 Python 代码实现针对数据文件的 K-means 聚类操作:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 1. 数据读取及处理
data = pd.read_csv('data.csv')
X = data.iloc[:, [0, 1]].values
# 2. 初始化聚类中心
K = 3
centroids = X[np.random.choice(range(len(X)), K, replace=False)]
# 3-5. 重复计算聚类中心点,直到收敛
max_iterations = 100
for i in range(max_iterations):
# 3. 计算每个点到每个聚类中心的距离进行分类
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
cluster_labels = np.argmin(distances, axis=0)
# 4. 计算每个类别对应点的坐标均值作为新的聚类中心点
new_centroids = np.array([X[cluster_labels == k].mean(axis=0) for k in range(K)])
# 5. 判断是否收敛
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
# 6. 使用聚类中心点对数据进行聚类并可视化结果
plt.scatter(X[:, 0], X[:, 1], c=cluster_labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', s=200, c='#050505')
plt.show()
```
在上面的代码中,我们首先使用 Pandas 加载了一个名为 `data.csv` 的数据文件,并提取出了前两列数据作为聚类的特征,然后我们随机初始化了聚类中心,聚类中心个数为 3。接着我们使用循环迭代的方法,先计算每个点到每个聚类中心的距离,然后根据距离最近的聚类中心进行分类,再计算每个类别对应点的坐标均值作为新的聚类中心点。如果新的聚类中心点和上一轮迭代的聚类中心点相同,则停止迭代。最终,我们使用 Matplotlib 可视化了聚类结果。在可视化结果中,我们使用黑色星号标记了聚类中心的位置。
需要注意的是,以上代码中的数据特征是二维的,如果你的数据特征不止两个,你需要相应地修改代码中的聚类中心的初始化、距离的计算以及可视化部分。
阅读全文