提问人:tincan 提问时间:11/16/2023 更新时间:11/18/2023 访问量:28
如何使用聚类根据高程对 2D 空间格网数据进行分组:聚类必须是连续的
How to group 2d spatial grid data based on their elevation using clustering: clusters have to be contiguous
答:
0赞
louis
11/17/2023
#1
编辑 - Matt 对 K-Means 提出了一个很好的观点......还添加了光谱聚类。
由于每个点都没有标签,只是在空间中的位置,因此您可以将其视为无监督学习问题,并使用 K-Means 创建聚类。
聚类将是连续的,因为 2D 格网上的每个点都将分配给一个且只有一个聚类。如果希望边界仅是垂直线和水平线,就像在绘图中一样,则可以获取 K-Means 的最终预测,并将它们用作决策树中的标签,其中唯一的特征是 x 和 y。
import pandas as pd
import numpy as np
import math
from sklearn.cluster import KMeans
grid_size = 100
grid = [[row, column, 75 * math.sin(row/25) * math.sin(column/25)] for row in range(grid_size) for column in range(grid_size)]
elevations = pd.DataFrame(grid, columns = ['x', 'y', 'z'])
clf = KMeans(n_clusters=4, random_state=0, n_init=10)
clf.fit(elevations)
centers = clf.cluster_centers_
predictions = clf.predict(elevations)
predictions = predictions.reshape(grid_size, grid_size)
plt.imshow(predictions, interpolation='nearest',
extent=(0, grid_size, 0, grid_size),
cmap=plt.cm.Pastel1,
aspect='auto', origin='lower')
plt.scatter(elevations['x'], elevations['y'], c = elevations['z'], s=1)
plt.scatter(centers[:, 0], centers[:, 1],
marker='x', s=100, linewidths=3,
color='w', zorder=10)
评论