微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在sklearn中使用稀疏矩阵来计算silhouette_score

如何解决无法在sklearn中使用稀疏矩阵来计算silhouette_score

我正在尝试使用稀疏矩阵来计算silhouette_score或silhouette_samples,但出现以下错误

ValueError:diag需要至少二维的数组

示例代码如下:

edges = [
(1,2,0.9),(1,3,0.7),4,0.1),5,0),6,(2,0.8),0.2),0.3),(3,0.25),(4,0.6),(5,(7,8,1.0)]

gg = nx.Graph()

for u,v,w in edges:
    gg.add_edge(u,weight=w)


adj = nx.adjacency_matrix(gg)
adj.setdiag(0)


from sklearn.metrics import silhouette_score,silhouette_samples

print(silhouette_score(adj,metric='precomputed',labels=labels))
silhouette_samples(adj,labels=labels)

解决方法

这是一个错误。您应该报告它。 Relevant code.

X,labels = check_X_y(X,labels,accept_sparse=['csc','csr'])

# Check for non-zero diagonal entries in precomputed distance matrix
if metric == 'precomputed':
    atol = np.finfo(X.dtype).eps * 100
    if np.any(np.abs(np.diagonal(X)) > atol):
        raise ValueError(
            'The precomputed distance matrix contains non-zero '
            'elements on the diagonal. Use np.fill_diagonal(X,0).'
        )

尽管输入检查明确接受CSC / CSR矩阵,但如果metric为'precomputed',则会将X放到不适用于稀疏矩阵的numpy函数中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。