如何使用KMeans对无标签XY坐标数据做距离聚类并可视化?
问题解答
1. 能否使用KMeans做聚类
完全可以。KMeans本身就是面向无标签数值型数据的聚类算法,你提供的X、Y坐标都是连续数值特征,完全符合KMeans的输入要求。
2. 具体实现步骤(Python环境)
默认使用pandas、scikit-learn、matplotlib库实现,以下是可直接运行的代码和说明:
- 第一步:导入依赖库
import pandas as pd from sklearn.cluster import KMeans import matplotlib.pyplot as plt
- 第二步:加载数据(以下是示例数据构造逻辑,你可以替换成自己的真实DataFrame)
df = pd.DataFrame({ 'X-COORDINATE': [12, 99, 90, 49], 'Y-COORDINATE': [34, 42, 27, 64] })
- 第三步:训练KMeans模型获取聚类标签
首先需要自行确定聚类簇数k,示例中我们取k=2,你可以根据自己的全量数据用肘部法、轮廓系数等方法确定最优k值:
# 初始化KMeans模型,random_state固定随机种子保证结果可复现 kmeans = KMeans(n_clusters=2, random_state=42) # 训练模型并直接返回每个样本的聚类标签,存入原DataFrame df['cluster_label'] = kmeans.fit_predict(df[['X-COORDINATE', 'Y-COORDINATE']])
运行完成后cluster_label列就是每个坐标点对应的聚类标签,取值为0到k-1的整数。
- 第四步:聚类结果可视化
plt.figure(figsize=(8, 6)) # 按聚类标签分组,不同簇用不同颜色绘制 for label, group in df.groupby('cluster_label'): plt.scatter(group['X-COORDINATE'], group['Y-COORDINATE'], label=f'簇{label}', s=100) # 补充图表信息 plt.xlabel('X-COORDINATE') plt.ylabel('Y-COORDINATE') plt.legend() plt.title('KMeans聚类结果可视化') plt.show()
注意事项
- KMeans对特征尺度敏感,如果你的XY坐标数值范围差异较大,建议先做标准化处理再训练模型,避免单一维度主导距离计算
- 聚类簇数不要随意指定,优先用肘部法计算不同k对应的簇内平方和,取拐点对应的k值,效果会更合理
内容的提问来源于stack exchange,提问作者GV-9wj
相关产品推荐
相关产品推荐

