因为每个点没有标签,只是空间中的位置,所以您可以将其视为无监督学习问题并使用 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)