2014-12-17 2 views
4

Я пытаюсь вычислить оценку PDF из KDE, вычисленную с использованием модуля scikit-learn. Я видел 2 варианта подсчета очков, и я стараюсь сделать следующее: Заявления A и B ниже.Оценка PDF в Scikit-Learn KDE

результатов Заявления А в следующей ошибке:

AttributeError: 'KernelDensity' object has no attribute 'tree_'

Заявления B Результаты в следующей ошибке:

ValueError: query data dimension must match training data dimension

Похож глупая ошибкой, но я не могу понять. Пожалуйста помоги. Код ниже ...

from sklearn.neighbors import KernelDensity 
import numpy 

# d is my 1-D array data 
xgrid = numpy.linspace(d.min(), d.max(), 1000) 

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d) 

# statement A 
density_score = KernelDensity(kernel='gaussian', bandwidth=0.08804).score_samples(xgrid) 

# statement B 
density_score = density.score_samples(xgrid) 

density_score = numpy.exp(density_score) 

Если это помогает, я использую 0.15.2 версию scikit-learn. Я пробовал это с помощью scipy.stats.gaussian_kde, поэтому проблем с данными нет.

ответ

7

С заявлением B, я была такая же проблема с этой ошибкой:

ValueError: query data dimension must match training data dimension 

Проблема здесь в том, что у вас есть данные массива 1-D, но когда вы кормите его, чтобы соответствовать функции(), он делает предположение, что у вас есть только 1 точка данных со многими измерениями! Так, например, если ваш размер данных обучения составляет 100000 точек, ваш d равен 100000x1, но подходит для них как 1x100000 !!

Таким образом, вы должны изменить свой д перед установкой: d.reshape (-1,1) и то же самое для xgrid.shape (-1,1)

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d.reshape(-1,1)) 
density_score = density.score_samples(xgrid.reshape(-1,1)) 

Примечание: проблема с утверждением A, заключается в том, что вы используете score_samples на объекте, который еще не подходит!

1

Прежде чем вы сможете опробовать образец, вам нужно вызвать функцию fit().

+0

Я звоню. См. Строку 'плотность = KernelDensity (kernel = 'gaussian', width = 0.08804) .fit (d)' – mlworker