是否可以在sklearn中使用pearson相关度量标准?

时间:2017-03-16 02:27:13

标签: python numpy scikit-learn correlation pearson

我有一个矩阵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参数而不是矩阵。

1 个答案:

答案 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')
    

    ` 来源:sklearn NearestNeighbors