【发布时间】:2022-10-08 03:59:51
【问题描述】:
我正在尝试使用 tslearn 对时间序列数据进行 kmeans 聚类。我对 110 个不同的文件进行了 110 次聚类。在对原始数据 x 执行 x = np.squeeze(to_time_series_dataset(x)) 之后,下面附上了 1 个特定文件的示例数据。我也尝试在不压缩的情况下使用数据,但是对于某些视频,值错误ValueError: x and y arrays must have at least 2 entries 仍然会弹出。
据我了解,我怀疑可能是因为在某些文件中,只有 1 个值不是nan,例如[1, nan, nan, nan] 之类的情况。如果是这样,我不能真正用实际值替换nans,因为在我的数据中,-1 代表“否”,0 代表“不确定”,1 代表“是”。这也是我不规范化数据的原因,因为它已经在 -1 到 1 的范围内。
有什么建议么?提前致谢。
[[ 0. 1. -1. nan]
[-1. 1. 0. -1.]
[ 0. -1. nan nan]
[ 0. 0. -1. nan]
[ 0. 1. 0. -1.]
[ 0. -1. nan nan]
[ 0. -1. -1. nan]
[ 0. 0. -1. nan]
[ 0. -1. nan nan]
[ 0. -1. nan nan]
[ 0. 0. -1. nan]
[-1. -1. nan nan]
[ 1. 1. -1. nan]
[ 1. -1. nan nan]
[ 0. -1. nan nan]
[ 1. -1. nan nan]
[ 0. -1. -1. nan]
[ 0. -1. nan nan]
[ 1. -1. nan nan]
[ 0. 0. -1. nan]
[ 0. -1. -1. nan]
[ 0. 1. -1. nan]
[ 0. 0. -1. nan]
[ 1. -1. nan nan]]
如果我不挤压数据,它会是这样的
[[[ 0.]
[ 1.]
[-1.]
[nan]]
[[-1.]
[ 1.]
[ 0.]
[-1.]]
[[ 0.]
[-1.]
[nan]
[nan]]
[[ 0.]
[ 0.]
[-1.]
[nan]]
[[ 0.]
[ 1.]
[ 0.]
[-1.]]
[[ 0.]
[-1.]
[nan]
[nan]]
[[ 0.]
[-1.]
[-1.]
[nan]]
[[ 0.]
[ 0.]
[-1.]
[nan]]
[[ 0.]
[-1.]
[nan]
[nan]]
[[ 0.]
[-1.]
[nan]
[nan]]
[[ 0.]
[ 0.]
[-1.]
[nan]]
[[-1.]
[-1.]
[nan]
[nan]]
[[ 1.]
[ 1.]
[-1.]
[nan]]
[[ 1.]
[-1.]
[nan]
[nan]]
[[ 0.]
[-1.]
[nan]
[nan]]
[[ 1.]
[-1.]
[nan]
[nan]]
[[ 0.]
[-1.]
[-1.]
[nan]]
[[ 0.]
[-1.]
[nan]
[nan]]
[[ 1.]
[-1.]
[nan]
[nan]]
[[ 0.]
[ 0.]
[-1.]
[nan]]
[[ 0.]
[-1.]
[-1.]
[nan]]
[[ 0.]
[ 1.]
[-1.]
[nan]]
[[ 0.]
[ 0.]
[-1.]
[nan]]
[[ 1.]
[-1.]
[nan]
[nan]]]
我调用以下命令来进行实际的聚类。由于我不确定每个文件有多少集群是最好的,我尝试了 2、3 或 4 个集群并评估它们的轮廓分数。
for j in [2,3,4]:
km = TimeSeriesKMeans(n_clusters=j, metric="dtw")
labels = km.fit_predict(x)
silhouetteScore = silhouette_score(x, labels, metric="dtw")
num_of_clusters_list.append(j)
silhouetteScore_list.append(silhouetteScore)
print(f"{j} clusters, score is {silhouetteScore}")
【问题讨论】:
标签: python time-series k-means