我想比较两种相关方法(大数据集)的性能,分别是Pearson和spearman。因此,我在pyspark中使用了mlib库。但是,在某些情况下,皮尔逊相关性给了我重要的价值,因为斯皮尔曼的表现很好。为了再次检查问题是否出在我的数据集中,我手动运行了一些示例,并且当我使用mlib相关函数时,Pearson相关的值不为nan。因此,我正在寻求帮助,以识别此处的错误或给我一些有关如何调试此功能中的错误的提示
以下是计算两个数组之间相关性的简单示例:
null
应该注意的是,输入的实际皮尔逊相关值为-0.1945
答案 0 :(得分:0)
看起来下溢可能正在某个地方赶上Spark,克服它的一种方法是像这样对数据进行规范化
import numpy as np
from sklearn.preprocessing import normalize
from pyspark.mllib.stat import Statistics
x=[-18,-18,-18,-17.95,-17.9,-17.95,-18,-18,-18,-18,-17.95,-17.9,-18,-18.1,-18.05,-18,-18,-18,-18.05,-18.1,-18.1,-18.1,-18.05,-18,-18,-18,-18.05,-18.1,-18.1,-18.1]
x=normalize(x).reshape(-1,1)
x=sc.parallelize(x)
y=[4.10E-07,3.65E-07,3.20E-07,3.20E-07,3.20E-07,3.15E-07,3.10E-07,3.30E-07,3.45E-07,3.60E-07,4.60E-07,5.60E-07,6.35E-07,7.10E-07,6.80E-07,6.50E-07,5.20E-07,3.90E-07,4.15E-07,4.40E-07,5.05E-07,5.70E-07,4.90E-07,4.10E-07,3.50E-07,2.90E-07,2.85E-07,2.80E-07,3.40E-07,4.00E-07]
y=normalize(y).reshape(-1,1)
y=sc.parallelize(y)
Statistics.corr(x,y,method='pearson')
Out[16]: -0.1945022009093267
但是不确定您所说的情况,因为您说您有相当大的数据集,并且应用归一化将对您来说多么可行