scikit-learn报”ValueError: If precomputed distance are used as affinity, it must be symmetric. “的原因以及解决办法

这个错误通常是由于使用了非对称的预计算距离作为聚类方法中的affinity参数引起的。affinity参数用于表示样本之间的相似度或距离度量,可以是字符串"rbf"、"cosine"或自定义距离函数,也可以是预先计算的距离矩阵。

解决这个问题的方法有以下几种:

  1. 检查预计算距离矩阵是否对称,如果不对称,需进行对称矫正。

  2. 更换affinity参数,比如可以改用"euclidean"、"manhattan"等距离度量方法,或者使用默认值"rbf",这会自动计算一个对称的高斯核距离矩阵。

  3. 使用对称的距离矩阵作为affinity参数,比如将非对称的距离矩阵做对称矫正后再传入。

以下是一些参考代码:

1. 对称化距离矩阵

from sklearn.metrics import pairwise_distances
D = pairwise_distances(X, metric='cosine')  # 非对称距离矩阵
D_sym = (D + D.T) / 2.0  # 对称距离矩阵

2. 替换affinity参数

from sklearn.cluster import SpectralClustering
model = SpectralClustering(n_clusters=2, affinity='euclidean')

3. 使用对称距离矩阵作为affinity参数

from sklearn.cluster import SpectralClustering
model = SpectralClustering(n_clusters=2, affinity='precomputed')
D = pairwise_distances(X, metric='cosine')
D_sym = (D + D.T) / 2.0
labels = model.fit_predict(D_sym)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:scikit-learn报”ValueError: If precomputed distance are used as affinity, it must be symmetric. “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部