Преобразователь плотности ядра для неотрицательных наблюдений - PullRequest
0 голосов
/ 29 мая 2018

Я моделирую распределение затрат на ремонт с помощью Оценщика плотности ядра пакета scikit learn в Python.Я создал функцию плотности, соответствующую моим наблюдениям, но при взятии случайной выборки из этого распределения возникают отрицательные значения.Поскольку наблюдения касаются затрат, которые всегда положительны, значения выборки должны быть неотрицательными.

Я прочитал, что с преобразованием данных этот результат может быть достигнут.Эти источники используют логарифмическое преобразование для усечения распределения в 0 ( Лог-трансформационная оценка плотности ядра распределения дохода , Оценка плотности ядра для случайных величин с ограниченной поддержкой - трюк преобразования ).Проблема в том, что я не знаю, как использовать это логарифмическое преобразование моих наблюдений в сочетании с функцией Kernel Density.

Код для KDE без преобразования выглядит следующим образом:

import numpy as np
from sklearn.neighbors import KernelDensity
import math as math

'Dataframe with costs'
x = costs

maxVal = x.max()
minVal = x.min()
upperBound = math.ceil(maxVal/1000)*1000

x_grid = np.linspace(0, upperBound, 1000)

'Create pdf with Kernel Density'
kde = KernelDensity(kernel='gaussian', bandwidth=612).fit(x_grid[:, np.newaxis])
log_pdf = kde.score_samples(x_grid[:, np.newaxis])
pdf=np.exp(log_pdf)

Мой код, включая преобразование:

'Log tranformation and creation of pdf'

x_pseudo = x.apply(np.log)

kde_psuedo = KernelDensity(kernel='gaussian', bandwidth=612).fit(x_pseudo[:, np.newaxis])
log_pdf_pseudo = kde_psuedo.score_samples(x_pseudo[:, np.newaxis])
pdf_pseudo=np.exp(log_pdf_pseudo)

x_grid_log = np.linspace(minVal, maxVal, 1000)

density = np.zeros(len(x_grid_log))

for i in range(len(x_grid_log)):
    xx=x_grid_log[i]
    density[i]=pdf_pseudo[xx.apply(np.log)/xx]

output = list(x=x_grid_log, y=density)  

Этот код основан на примере из исходного кода 2 , сделано в R. Я знаю, что код неправильный, но я не знаю, как это исправить.Любая помощь будет принята с благодарностью!

...