You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于K-means/K-means++的地理定位数据空间域划分技术咨询

基于K-means/K-means++的空间域定义与地图生成实践

我在研究中收集了多种带有地理参考点的数据,需要通过K-means/K-means++聚类方法定义空间域,并生成标注该空间域的地理参考点地图。目前已安装Jupyter Notebook、pandas、scikit-learn、openpyxl,且编写并运行了基于PCA与KMeans的聚类代码(如下),同时附有研究区地理参考点图、GS+生成的NDVI数据地图示例、Excel数据示例图及聚类结果图。作为初学者,我希望深入理解该方法并完成空间域地图生成,参考文章为《EVALUATION OF CLUSTERING TECHNIQUES FOR DEFINING STATIONARY DOMAINS SUPPORTED BY GEOSTATISTICS》。

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

data = pd.read_excel('areafoliartotal.xlsx')

display(data)

pca = PCA(n_components=2)
pca_data = pca.fit_transform(data)

kmeans = KMeans(n_clusters=3)
kmeans.fit(pca_data)

plt.scatter(pca_data[:, 0], pca_data[:, 1], c=kmeans.labels_)
plt.title('PCA with KMeans Clustering')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()

方法深入理解要点

  • PCA的核心作用: 把多维度的原始数据降维到2维,保留数据的主要变异特征,既简化了K-means的计算量,又避免了高维数据容易出现的"维度灾难"问题。
  • K-means与K-means++的区别: 当前代码用的是默认的K-means初始化方式,K-means++通过更合理地选择初始聚类中心,能有效避免算法陷入局部最优解。只需把KMeans(n_clusters=3)改成KMeans(n_clusters=3, init='k-means++')就能启用该优化。
  • 如何确定最优聚类数: 固定设置n_clusters=3不一定合理,推荐用两种方法判断:
    • 肘部法则:绘制聚类数和SSE(平方误差和)的曲线,找到曲线突然变平缓的拐点,对应的聚类数就是较优选择。
    • 轮廓系数:计算每个样本的轮廓系数,平均值越接近1,说明聚类的效果越好。

空间域地图生成实操步骤

  1. 关联地理坐标: 确保你的Excel数据里包含经纬度(或其他地理参考坐标)列,聚类完成后把标签和原始坐标对应起来。
  2. 选择合适的可视化工具:
    • 若要生成交互式地图,推荐用folium,代码示例如下:
      import folium
      
      # 假设数据包含latitude(纬度)和longitude(经度)列
      data['cluster_label'] = kmeans.labels_
      # 初始化地图,以研究区中心为起点
      map_center = [data['latitude'].mean(), data['longitude'].mean()]
      m = folium.Map(location=map_center, zoom_start=10)
      
      # 为不同聚类设置不同颜色
      cluster_colors = ['#FF0000', '#0000FF', '#008000']
      for _, row in data.iterrows():
          folium.CircleMarker(
              location=[row['latitude'], row['longitude']],
              radius=6,
              color=cluster_colors[row['cluster_label']],
              fill=True,
              fill_color=cluster_colors[row['cluster_label']],
              fill_opacity=0.7
          ).add_to(m)
      
      # 保存为HTML交互式地图
      m.save('spatial_domain_map.html')
      
    • 若要生成静态地图,可使用geopandas结合matplotlib,能更好地处理矢量地理数据。
  3. 验证空间域的合理性: 结合参考文章中的地统计学方法(比如变异函数分析),验证聚类得到的空间域是否符合空间平稳性假设,确保研究结果的科学性。

内容的提问来源于stack exchange,提问作者Ferretto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:57:44