间隙统计的 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 code,OptimalK.__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()
为了这个目的,我一直在玩这个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 code,OptimalK.__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()