【问题标题】:tslearn time series clustering ValueError: x and y arrays must have at least 2 entriestslearn 时间序列聚类 ValueError:x 和 y 数组必须至少有 2 个条目
【发布时间】: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


    【解决方案1】:

    您可以使用 KneeLocator(或 ElbowLocator)找到最佳 K。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2014-09-13
      相关资源
      最近更新 更多