前面一篇文章给大家详细介绍了KMeans聚类分析算法的原理及代码实现逻辑。
由于文章中进行聚类分析的例子仅是对离散的矢量点数据基于空间距离进行了聚类分析,而实际的数据结构可能不单纯是基于空间位置或点数据进行聚类分析,比如基于一些线数据或面数据,此外这些数据还会具有多维的属性结构,比如人口密度、区域面积、平均降雨量、人均GDP等属性信息。
针对这个带有多种属性的面状数据,现在我们有一个需求,对这个面状数据进行聚类分析,假定要基于【人均GDP、人口密度、平均降雨量、区域面积】这四个属性分为五类。可能很多初学者看到这里就会有点懵逼了,在学习KMeans聚类分析的时候,大部分案例和算法都是基于空间距离进行讲解的,而空间距离意味着我们是基于X和Y坐标进行计算(假定我们这里的数据是基于二维的空间数据结构),比如每个点的空间位置属性为(X,Y),那么我们在进行聚类分析的时候会不断迭代计算所有点之间的几何距离,根据欧式距离,两点距离如下:
其中X、Y分别代表空间某点的横纵坐标,转换为GIS数据坐标可能代表着投影坐标,也可能是经纬度坐标。但是我们的数据结构是面状数据的四个属性进行聚类分析,这时候该怎么用算法来做分析呢?
其实,你只要清楚了空间距离上的聚类分析逻辑,哪怕我们的数据结构非常复杂,需要进行分析的维度非常多,所谓换汤不换药,这时候,我们只需要把每个数据的数据结构由(X,Y)变为(属性1,属性2,属性3,属性四,......)即可。基于我们的现实需求,这时候每个面的数据结构变为(人均GDP,人口密度,平均降雨量,区域面积),虽然结构复杂了,但是计算方法还是一样,使用欧式距离即可,只不过此时的欧式距离D如下:
我们仍旧把上述公式计算的结果等同于一个距离,然后就可以带入到KMeans算法中进行聚类了。经过聚类后,得到的属性表中增加了一个分类字段见下图:
然后我们在ArcGIS中对该字段进行分类渲染,得到下面的图:
接下来,我们就可以进一步制作GIS专题图了。接下来,通过视频给大家详细展示下我J基于ArcGIS Engine及ArcGIS Python技术开发的多维聚类分析工具~
【GIS人必备】最强KMeans聚类分析工具-数据挖掘、科研分析必备!