当输入数据为正态分布时,pyspark.mllib.stat.KernelDensity中的KernelDensity.estimate是否起作用?

当输入数据为正态分布时,pyspark.mllib.stat.KernelDensity中的KernelDensity.estimate是否起作用?,pyspark,apache-spark-mllib,Pyspark,Apache Spark Mllib,pyspark的KernelDensity.estimate在正态分布的数据集上是否正常工作?当我尝试那样做时,我会出错。我已提交(当输入数据为正态分布时,pyspark.mllib.stat.KernelDensity中的KernelDensity.estimate抛出net.razorvine.pickle.pickle异常(当数据为非正态分布时无错误)) 示例代码: vecRDD = sc.parallelize(colVec) kd = KernelDensity() kd.setSam

pyspark的KernelDensity.estimate在正态分布的数据集上是否正常工作?当我尝试那样做时,我会出错。我已提交(当输入数据为正态分布时,pyspark.mllib.stat.KernelDensity中的KernelDensity.estimate抛出net.razorvine.pickle.pickle异常(当数据为非正态分布时无错误))

示例代码:

vecRDD = sc.parallelize(colVec)
kd = KernelDensity()
kd.setSample(vecRDD)
kd.setBandwidth(3.0)
# Find density estimates for the given values
densities = kd.estimate(samplePoints)
当数据不是高斯分布时,我得到。 5.6654703477e-05,0.0001,0.0001,0.0001

作为参考,使用Scala,对于高斯数据, 代码:

我得到:
[0.04113814235801906,1.0994865517293571E-163,0.0,0.0,…

我遇到了同样的问题,并且能够将问题降至最低。如果您使用Python中的Numpy在RDD中生成数据,那么这就是问题所在

import numpy as np
kd = KernelDensity()
kd.setSample(sc.parallelize([0.0, 1.0, 2.0, 3.0])) # THIS WORKS
# kd.setSample(sc.parallelize([0.0, np.float32(1.0), 2.0, 3.0])) # THIS FAILS
kd.setBandwidth(0.35)
kd.estimate([0.0, 1.0])

如果这也是您的问题,只需将Numpy数据转换为Python基类型,直到问题得到解决。您可以通过使用函数来实现这一点。

我遇到了同样的问题,并且能够将问题降至最低。如果您在Python中使用Numpy在RDD中生成数据,那么这就是问题所在

import numpy as np
kd = KernelDensity()
kd.setSample(sc.parallelize([0.0, 1.0, 2.0, 3.0])) # THIS WORKS
# kd.setSample(sc.parallelize([0.0, np.float32(1.0), 2.0, 3.0])) # THIS FAILS
kd.setBandwidth(0.35)
kd.estimate([0.0, 1.0])
如果这也是您的问题,只需将Numpy数据转换为Python基类型,直到修复