Python 间隙统计的OptimalIK出错:“int”对象不可编辑

Python 间隙统计的OptimalIK出错:“int”对象不可编辑,python,k-means,Python,K Means,我在玩这个游戏,它是关于运行文本聚类的k-means。我想通过自动识别聚类的最佳k值来扩展它。我正试图为此目的使用 作为第一步,我必须使用:conda install-c milesgranger gap stat安装这个包 然后,我尝试了下面的代码 from gap_statistic import OptimalK optimalK = OptimalK(parallel_backend='rust') k, gapdf = optimalK(X, cluster_array=np.aran

我在玩这个游戏,它是关于运行文本聚类的k-means。我想通过自动识别聚类的最佳k值来扩展它。我正试图为此目的使用

作为第一步,我必须使用: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=optimalKX.toarray,cluster_array=np.arange1,11,因为optimalK函数将接受numpy数组

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

猜测这是一个在OptimalIK中未处理的异常。尽管如此,我能做些什么来解决这个问题。

根据,optimalik.\uuu call\uuuu返回一个整数,请参见第88行:

return int(self.gap_df.loc[np.argmax(self.gap_df.gap_value.values)].n_clusters)
您的代码尝试使用k,gapdf将此整数解压为两个对象,如下所示:

当然,这是不可能的。

k,gapdf=optimalKX.toarray,cluster\u array=np.arange1,11与OptimalK的源代码冲突,如中所示

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

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

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

非常感谢。您的回答帮助我发现我混淆了两个不同的差距统计示例。以下是两个示例笔记本-,
# optimal k value
k = optimalK(X.toarray(), cluster_array=np.arange(1, 11))

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