1

我有一个矩阵 X,我正在尝试将 KNN 与 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 参数而不是矩阵。

4

1 回答 1

2

这是有关此事的文档:

如果 metric 是一个可调用函数,则在每对实例(行)上调用它并记录结果值。可调用对象应将两个数组作为输入并返回一个值,指示它们之间的距离。

此外,指标的有效值为:

来自 scikit-learn:

['cityblock','余弦','欧几里得','l1','l2','曼哈顿']

来自 scipy.spatial.distance:

['braycurtis', 'canberra', 'chebyshev', '<strong>相关性', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'matching', '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)
    

    ` 来源:sklearn NearestNeighbors

于 2017-03-16T03:05:19.587 回答