我有一个矩阵X,我试图使用KNNS与pearson相关度量。是否可以将pearson相关性用作sklearn指标?我尝试过这样的事情:
def pearson_calc(M):
P = (1 - np.array([[pearsonr(a,b)[0] for a in M] for b in M]))
return P
nbrs = NearestNeighbors(n_neighbors=4, metric=pearson_calc)
nbrs.fit(X)
knbrs = nbrs.kneighbors(X)
但是,这不起作用,因为我收到以下错误:
pearson_affinity() takes 1 positional argument but 2 were given
我假设pearson_calc函数是错误的。也许它需要a,b参数而不是矩阵。
答案 0 :(得分:1)
以下是有关此事的文件:
如果metric是可调用的函数, 它在每个实例(行)和结果值上调用 记录。可调用的 应该将两个数组作为输入并返回一个 表示它们之间距离的值。
此外,指标的有效值为:
来自scikit-learn的:
['cityblock','cosine','euclidean','l1','l2','manhattan']
来自scipy.spatial.distance:
[“braycurtis”, 'canberra','chebyshev',' 相关性 ','骰子','汉明','jaccard', 'kulsinski','mahalanobis','匹配','minkowski','rogerstanimoto', 'russellrao','seuclidean','sokalmichener','sokalsneath', 'sqeuclidean','yule']
两件事:
你的函数需要有两个参数(要计算度量(距离)的两行。这就解释了为什么错误说两个参数被传递给它。
您可以使用scipy.spatial.distance.correlation作为指标。
from scipy.spatial.distance import correlation
nbrs = NearestNeighbors(n_neighbors=4, metric='correlation')