Python 可以在sklearn中使用pearson相关度量吗?

Python 可以在sklearn中使用pearson相关度量吗?,python,numpy,scikit-learn,correlation,pearson,Python,Numpy,Scikit Learn,Correlation,Pearson,我有一个矩阵X,我正试图使用KNN和皮尔逊相关度量。是否可以使用皮尔逊相关性作为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.kn

我有一个矩阵X,我正试图使用KNN和皮尔逊相关度量。是否可以使用皮尔逊相关性作为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()接受1个位置参数,但给出了2个


我假设pearson_calc函数是错误的。也许它需要一个a,b参数,而不是一个矩阵

以下是关于此事的文件:

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

此外,度量的有效值为:

从scikit学习:

[“城市块”、“余弦”、“欧几里德”、“l1”、“l2”、“曼哈顿”]

从scipy.spatial.distance开始:

['braycurtis', ‘堪培拉’、‘切比雪夫’、‘相关性’、‘骰子’、‘哈明’、‘杰卡德’, “kulsinski”、“mahalanobis”、“matching”、“minkowski”、“rogerstanimoto”, “russellrao”、“seuclidean”、“sokalmichener”、“sokalsneath”, “欧几里得”、“圣诞节”]

两件事:

  • 您的函数需要接受两个参数(计算度量(距离)的两行)。这解释了为什么错误会说两个参数被传递给它

  • 您可以使用
    scipy.space.distance.correlation
    作为度量,如下所示:

      from scipy.spatial.distance import correlation
      nbrs = NearestNeighbors(n_neighbors=4, metric=correlation)
    
    ` 资料来源: