4

我正在尝试遵循有关xarray文档的教程:http: //xarray.pydata.org/en/stable/dask.html#automatic-parallelization

我的最终目标是从具有约 100,000 个属性的数据集中获得成对的 spearman 相关矩阵,这使我学习了上述教程。我正在iris dataset从 from上测试实现,sklearn但我遇到了问题,因为这种类型的并行化语法与joblib.

我不知道如何获取下面的代码来制作一个成对的 spearman 相关矩阵,结果形状为(150,150). 我展示了一个这样做的例子,pandas但这不是平行的,并且将永远在我的实际数据集上。

有谁知道如何调整此xarray代码以创建对称相关度量?如果没有,有人可以指导我找到一种更好的方法来进行成对相似性测量。我知道,sklearns pairwise_distance但我想知道这是否是唯一的实现?

import bottleneck
import pandas as pd
import xarray as xr
from sklearn.datasets import load_iris

X_iris = pd.DataFrame(load_iris().data,
                       index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
                       columns = [x.split(" (cm)")[0].replace(" ","_") for x in load_iris().feature_names])
da_iris = xr.DataArray(X_iris, dims=["samples", "attributes"])

def covariance_gufunc(x, y):
    return ((x - x.mean(axis=-1, keepdims=True))
            * (y - y.mean(axis=-1, keepdims=True))).mean(axis=-1)

def pearson_correlation_gufunc(x, y):
    return covariance_gufunc(x, y) / (x.std(axis=-1) * y.std(axis=-1))

def spearman_correlation_gufunc(x, y):
    x_ranks = bottleneck.rankdata(x, axis=-1)
    y_ranks = bottleneck.rankdata(y, axis=-1)
    return pearson_correlation_gufunc(x_ranks, y_ranks)

def spearman_correlation(x, y, dim):
    return xr.apply_ufunc(
        spearman_correlation_gufunc, x, y,
        input_core_dims=[[dim], [dim]],
        dask='parallelized',
        output_dtypes=[float])

在此处输入图像描述

4

0 回答 0