如何使用聚类根据海拔高度对二维空间网格数据进行分组:聚类必须是连续的

问题描述 投票:0回答:1

我有二维网格数据,我想根据高程对其进行分组,但集群必须是连续的,并且在 (4) 中具有最小数量的数据。聚类的直观表示如下所示:

谢谢!

python scikit-learn cluster-analysis
1个回答
0
投票

因为每个点没有标签,只是空间中的位置,所以您可以将其视为无监督学习问题并使用 K-Means 来创建聚类。

这些簇将是连续的,因为 2D 网格上的每个点都将分配给一个且仅一个簇。如果您希望边框只是像绘图中那样的垂直和水平线,您可以采用 K 均值的最终预测,并将它们用作决策树中的标签,其中唯一的特征是 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)

© www.soinside.com 2019 - 2024. All rights reserved.