Я бы хотел сделать
- оценка плотности ядра сегментированного или группового pypark
- Соедините полученные оценки плотности с другим фреймом данных и сделайте вывод
Например, представьте, что у меня есть кадр данных, который выглядит следующим образом:
data=[{'id':1, 'samples':[3,56,40]},
{'id':2, 'samples':[-3,80,45,45,2]}]
Эти данные получены из чего-то вроде
df.groupBy('id').agg(F.collect_list('sample').alias('samples'))
где df
большой. Тогда представьте, что у меня есть еще один большой массив данных, например:
data2 = [{'id':1, 'val': 10},
{'id':1, 'val': 39},
{'id':2, 'val': 5}]
Я хотел бы получить вероятности для этих трех значений, 10, 39, 5 по отношению к двум оценкам плотности, которые я получил выше.
Например, программа на Python, которая будет делать это, будет
import scipy.stats
data_to_define_pdfs=[{'id':1, 'samples':[3,56,40]},
{'id':2, 'samples':[-3,80,45,45,2]}]
kdes = {}
for row in data_to_define_pdfs:
kdes[row['id']] = scipy.stats.gaussian_kde(row['samples'])
inferrence_data = [
{'id': 1, 'val': 10},
{'id': 1, 'val': 39},
{'id': 2, 'val': 5}]
for row in inferrence_data:
kde = kdes[row['id']]
row['prob'] = kde.pdf(x=row['val'])[0]
import pprint
pprint.pprint(inferrence_data)
что бы вывести
[{'id': 1, 'prob': 0.008817584549791962, 'val': 10},
{'id': 1, 'prob': 0.012149240532443975, 'val': 39},
{'id': 2, 'prob': 0.008013522166302479, 'val': 5}]