我想根据三个气象场对模式进行聚类。每个字段的形状为 31、137、181(31 个时间步长、137 个纬度、181 个经度),我想要每个时间步长的集群空间图。鉴于通用 kmeans 聚类方法中的标签没有意义并且不允许随着时间的推移“跟踪”聚类,我尝试在 python 中使用
tslearn.clustering
,但我不确定如何构建我的数据?这是为我工作的例子
import numpy as np
import xarray as xr
from tslearn.clustering import TimeSeriesKMeans
# Load the data
ds_var1 = xr.open_dataset(var1).var1
ds_var2 = xr.open_dataset(var2).var2
ds_var3 = xr.open_dataset(var3).var3
# Stack
X = np.stack((ds_msl.values.flatten(),
ds_10u.values.flatten(),
ds_10v.values.flatten()),
axis=1)
X = X.reshape(-1, 3)
## or X = X.reshape(-1, 3, 1) ??
# Cluster the data using time-series k-means
n_clusters = 8
km = TimeSeriesKMeans(n_clusters=n_clusters,
metric="euclidean",
verbose=0,
max_iter=5,
n_init=5,
random_state=0)
labels = km.fit_predict(X)
# Reshape the cluster labels to match the original data shape
labels = labels.reshape(ds_var1.shape)
据我所知,
X
的形状是 number_of_samples,number_of_frames,特征?但我不清楚这如何适用于我的问题。 X = X.reshape(-1, 3) (X.shape = (768707, 3))
或 X = X.reshape(-1, 3, 1) (X.shape = (768707, 3, 1))
都会产生输出,但我不知道这里的正确解决方案是什么/我是否需要假设一个完全不同的形状?我在文档中也找不到它,谁能帮我解决这个问题?