2017-05-19 2 views
1

Funktioniert KernelDensity.estimate von pyspark auf einem normal verteilten Datensatz korrekt? Ich bekomme einen Fehler, wenn ich das versuche. Ich habe eingereicht https://issues.apache.org/jira/browse/SPARK-20803 (KernelDensity.estimate in pyspark.mllib.stat.KernelDensity net.razorvine.pickle.PickleException führt, wenn die Eingangsdaten normal verteilt ist (kein Fehler, wenn die Daten nicht normal verteilt))Funktioniert KernelDensity.estimate in pyspark.mllib.stat.KernelDensity, wenn Eingabedaten normal verteilt sind?

Beispielcode:

Wenn Daten nicht Gauß ist, bekomme ich für zB 5.6654703477e-05,0.000100010001,0.000100010001,0.000100010001, .....

Als Referenz mit Scala, für Gaussian Daten, Code:

vecRDD = sc.parallelize(colVec) 
kd = new KernelDensity().setSample(vecRDD).setBandwidth(3.0) 
// Find density estimates for the given values 
densities = kd.estimate(samplePoints) 

ich: [0.04113814235801906,1.0994865517293571E -163,0.0,0.0, .....

Antwort

0

Ich konfrontiert das gleiche Problem und war in der Lage, das Problem auf eine sehr minimale test case zu finden. Wenn Sie Numpy in Python verwenden, um die Daten in der RDD zu generieren, dann ist das das Problem!

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]) 

Wenn dies Ihr Problem so gut ist, wandeln Sie einfach die Numpy Daten zu Python Basistyp, bis die Spark issue befestigt ist. Sie können das tun, indem Sie die np.asscalar Funktion verwenden.

Verwandte Themen