如何使用scikit规范化核密度估计?

我在多类分类中使用KDE(核密度估计)。我使用scikit来实现它。如网站所述,点x的KDE定义为,

在比较不同类别的不同核密度估计时,我应该规范化结果吗?

KDE的链接:
http://scikit-learn.org/stable/modules/density.html#kernel-density-estimation


回答:

等式不成立,这显然是一个糟糕的文档示例。你可以在代码中看到它是规范化的,就像这里

log_density -= np.log(N)return log_density

所以你显然是除以N的。

从数学角度来看,正确的公式实际上是

1/N SUM_i K(x_i - x)

或者

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的有效密度,这就是内部发生的事情。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注