python - Python - cdist 函数中数组的维度问题
问题描述
我正在尝试为 k-means 找到正确数量的集群并为此使用cdist函数。
我可以理解cdist的论点应该是相同的维度。我尝试打印两个参数的大小,即 (2542, 39) 和 (1, 39)。
有人可以建议我哪里出错了吗?
print(tfidf_matrix.shape) ### Returning --> (2542, 39)
#Finding optimal no. of clusters
from scipy.spatial.distance import cdist
clusters=range(1,10)
meanDistortions=[]
for k in clusters:
model=KMeans(n_clusters=k)
model.fit(tfidf_matrix)
prediction=model.predict(tfidf_matrix)
print(model.cluster_centers_.shape) ## Returning (1, 39)
meanDistortions.append(sum(np.min(cdist(tfidf_matrix, model.cluster_centers_, 'euclidean'), axis=1)) /
tfidf_matrix.shape[0])
错误:
ValueError Traceback (most recent call last)
<ipython-input-181-c15e32d863d2> in <module>()
12 prediction=model.predict(tfidf_matrix)
13 print(model.cluster_centers_.shape)
---> 14 meanDistortions.append(sum(np.min(cdist(tfidf_matrix, model.cluster_centers_, 'euclidean'), axis=1)) /
15 tfidf_matrix.shape[0])
16
~\Downloads\Conda\envs\data-science\lib\site-packages\scipy\spatial\distance.py in cdist(XA, XB, metric, *args, **kwargs)
2588
2589 if len(s) != 2:
-> 2590 raise ValueError('XA must be a 2-dimensional array.')
2591 if len(sB) != 2:
2592 raise ValueError('XB must be a 2-dimensional array.')
ValueError: XA must be a 2-dimensional array.
解决方案
这可能是类型问题。
Tfidf 可能不是 cdist 要求的密集矩阵。当然,在这里使用稀疏矩阵是有意义的。
但是,cdist 似乎不接受稀疏矩阵:scipy cdist with sparse matrices
推荐阅读
- bitbucket-pipelines - bitbucket 管道双重缓存不起作用
- php - 选择 * 其中 Column_A 和 Column_B 是唯一的
- python - 编写一个程序,生成 20 次随机掷骰子序列并打印骰子值,只标记最长的一次
- python - 如何在进程启动时缓存字典值
- windows - 应用程序无法在 Windows 7 上正确启动 (0xc000007b) 错误。旧版本仍然可以正常工作
- python - 如何将变量插入字符串?
- python - 熊猫数据框比较索引的所有列值而没有列名参考
- python - 我每次都需要为新变量分配可能无限数量的值
- visual-studio - 如何确认 Eigen 在 Visual Studios 中启用矢量化?如何检查是否定义了 EIGEN_VECTORIZE 预处理器符号?
- html - 折叠表格行而不是单元格时是否存在已知问题?