2015-04-02 6 views
0

Я использую scikit-learn (0.14) и пытаюсь реализовать определенную пользователем метрику для оценки KernelDensity.Как использовать определяемую пользователем метрику в KernelDensity из scikit-learn (python)

Следующий код является примером того, как структурирована мой код:

def myDistance(x,y): 
    return np.sqrt(sum((x - y)**2)) 

dt=DistanceMetric.get_metric("pyfunc",func=myDistance) 

kernelModel=KernelDensity(algorithm='ball_tree',metric='pyfunc') 
kernelModel.fit(X) 

Согласно документации, алгоритм BallTree должен принимать определенные пользователем метрики. Если я запускаю этот код так, как данное здесь, я получаю следующее сообщение об ошибке:

TypeError: __init__() takes exactly 1 positional argument (0 given) 

ошибка, кажется, исходит из:

sklearn.neighbors.dist_metrics.PyFuncDistance.__init__ 

Я не понимаю этого. Если я проверю, что дает «dt» в приведенном выше коде, я получаю то, что ожидаю. dt.pairwise (X) возвращает правильные значения. Что я делаю неправильно?

Заранее спасибо.

ответ

1

Решение является

kernelModel=KernelDensity(...,metric='pyfunc',metric_params={"func":myDistance}) 

Вызов Distancemetric.get_metric не является необходимым. M

 Смежные вопросы

  • Нет связанных вопросов^_^