间隙统计的 optimalK 错误:'int' 对象不可迭代

Error with optimalK of gap-statistic: 'int' object is not iterable

为了这个目的,我一直在玩这个kaggle kernel which is about running k-means for text clustering. I wanted to extend it by automating the identification of optimal k value for the clustering. I am trying to use gap-statistic

作为第一步,我必须安装包:conda install -c milesgranger gap-stat

然后,我尝试了下面这段代码。

from gap_statistic import OptimalK
optimalK = OptimalK(parallel_backend='rust')
k, gapdf = optimalK(X, cluster_array=np.arange(1, 11))

最终出现此错误: ValueError:此函数不支持稀疏矩阵。也许 scipy.sparse.linalg 函数之一可以代替。 我知道我已将最后一行代码更改为 k, gapdf = optimalK(X.toarray(), cluster_array=np.arange(1, 11)) 因为 optimalK 函数将接受 numpy 数组。

此更改很好地处理了第一个错误。然后又登陆了另一个错误:TypeError: 'int' object is not iterable

猜测这是 optimalK 内部未处理的异常。尽管如此,我能做些什么来解决这个问题吗?

根据the source codeOptimalK.__call__ returns 一个整数(见第88行):

return int(self.gap_df.loc[np.argmax(self.gap_df.gap_value.values)].n_clusters)

您的代码尝试使用 k, gapdf 将此整数解压缩为两个对象:

k, gapdf = optimalK(X, cluster_array=np.arange(1, 11))

这当然不可能。

k, gapdf = optimalK(X.toarray(), cluster_array=np.arange(1, 11)) 与 OptimalK 的源代码冲突,如 .

以下代码更改将消除错误。它是错误片段的正确等价物。

# optimal k value
k = optimalK(X.toarray(), cluster_array=np.arange(1, 11))

# dataframe with gap values
gapdf = optimalK.gap_df.head()