间隙统计值的optimizeK错误:“ int”对象不可迭代

时间:2019-05-09 10:53:26

标签: python k-means

我正在玩这个kaggle kernel,它是关于运行k-means进行文本聚类的。我想通过自动识别聚类的最佳k值来扩展它。我正试图为此目的使用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:该函数不支持稀疏矩阵。 我了解到我已将最后一行代码更改为k, gapdf = optimalK(X.toarray(), cluster_array=np.arange(1, 11)),因为optimizeK函数将接受numpy数组。

此更改很好地处理了第一个错误。然后出现另一个错误: TypeError:'int'对象不可迭代

将其猜测为一个例外,使其无法在OptimizeK中处理。尽管如此,我有什么办法可以解决这个问题。

2 个答案:

答案 0 :(得分:1)

根据the source codeOptimalK.__call__返回一个整数(请参见第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))

这当然是不可能的。

答案 1 :(得分:0)

k, gapdf = optimalK(X.toarray(), cluster_array=np.arange(1, 11))与OptimalK的源代码冲突,就像ForceBru's Answer中一样。

以下代码更改将消除此错误。正确地等同于错误的代码段。

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

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