O.r*_*rka 5 python parallel-processing correlation dask pairwise
xarray我正在尝试遵循文档上的教程: http://xarray.pydata.org/en/stable/dask.html#automatic-parallelization
我的最终目标是从具有约 100,000 个属性的数据集中获取成对的斯皮尔曼相关矩阵,这使我找到了上面提到的教程。我正在测试iris datasetfrom的实现sklearn,但我遇到了问题,因为这种类型的并行化语法与joblib.
我不知道如何获取下面的代码来制作成对的斯皮尔曼相关矩阵,其结果形状为(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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |