首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ValueError: x和y数组必须至少有2个条目

ValueError: x和y数组必须至少有2个条目
EN

Stack Overflow用户
提问于 2022-06-06 14:06:13
回答 1查看 162关注 0票数 0

我正在尝试使用tslearn对时间序列数据进行kmeans聚类。我正在对110个不同的文件进行110次集群。在对原始数据x执行x = np.squeeze(to_time_series_dataset(x))之后,下面附加了一个特定文件的示例数据。我也尝试使用数据而不压缩数据,但是对于某些视频,值错误ValueError: x and y arrays must have at least 2 entries仍然会弹出。

根据我的理解,我怀疑可能是因为在某些文件中,只有一个值不是nan,例如[1, nan, nan, nan]。如果是这样的话,我真的不能用实际值替换nans,因为在我的数据中,-1表示"no",0表示“不确定”,1表示“是”。这也是为什么我没有标准化数据,因为它已经在-1到1的范围内。

有什么建议吗?提前谢谢。

代码语言:javascript
运行
复制
[[ 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]]

如果我不压缩数据,就会是这样

代码语言:javascript
运行
复制
[[[ 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个集群并评估它们的剪影得分。

代码语言:javascript
运行
复制
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}")
EN

回答 1

Stack Overflow用户

发布于 2022-10-07 19:59:51

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72518907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档