Равенство не выполняется, это явно плохой пример документации. Вы можете видеть в коде, что он нормализован, как здесь
log_density -= np.log(N)
return log_density
так что вы четко делите на N
.
Правильная формула с математической точки зрения на самом деле либо
1/N SUM_i K(x_i - x)
or
1/(hN) SUM_i K((x_i - x)/h)
вы также можете углубиться в код .c фактически вычисляющие ядра, и вы обнаружите, что они внутренне нормализованы
case __pyx_e_7sklearn_9neighbors_9ball_tree_GAUSSIAN_KERNEL:
/* "binary_tree.pxi":475
* cdef ITYPE_t k
* if kernel == GAUSSIAN_KERNEL:
* factor = 0.5 * d * LOG_2PI # <<<<<<<<<<<<<<
* elif kernel == TOPHAT_KERNEL:
* factor = logVn(d)
*/
__pyx_v_factor = ((0.5 * __pyx_v_d) * __pyx_v_7sklearn_9neighbors_9ball_tree_LOG_2PI);
break;
Таким образом, каждый K
фактически интегрируется в 1
, и, следовательно, вы просто берете среднее значение, чтобы получить правильную плотность для всего KDE, и это именно то, что происходит внутри.
person
lejlot
schedule
11.05.2016