KDE相关记录

20220809 -

在使用KDE的过程中,涉及到一些参数选择,或者运行速度的问题。
目前经过调试之后,对各个部分的内容都进行了涉及,这里记录一下。

首先,KDE(kernel density estimate),是一种无参数的概率密度估计方法?(这里没说错吧,感觉好久没看,都忘了)

那么对于这个方法来说,比较重要的参数就是bandwidth,选择这个参数,有很多方法,如果从机器学习的角度来说,那么直接使用交叉验证的方法即可,他验证的方式是比较最大似然估计的数值,具体代码如下。


params = {'bandwidth': 
np.logspace(0.5, 5, num=10, base=2)}
hyper_kde = GridSearchCV(
KernelDensity(kernel=self.kernel), 
params, n_jobs=-1, cv=5, verbose=0)

hyper_kde.fit(X_train)

从代码中可以看到,直接使用网格搜索的话,整体逻辑还是比较简单的。不过这里,不论是论文里,还是一些博客里,都说是最大似然估计的方式来进行,不过跟平时的时候,使用的那种利用(X,y)进行交叉验证的话,采用准确率等指标来进行评估不太一样,所以这里并不是非常理解。

然后对于运行速度来说,KDE的话,在训练的过程中,他并不存在n_jobs这种参数,经过查看官方文档内容后发现,可以通过leaf_size这个参数指定底层的bd树这种数据结构的内容来提升查询速度?!这里我不是非常确定。不过,将这个数据调大之后,的确速度有所提升,不管是训练还是测试。

但对于对于测试阶段来说,这里主要使用的函数是score_samples,这个函数就可以利用多CPU并行计算的优势来进行了。问答[1]提供了代码如下,

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

def parrallel_score_samples(kde, samples, thread_count=int(0.875 * multiprocessing.cpu_count())):
    with multiprocessing.Pool(thread_count) as p:
        return np.concatenate(p.map(kde.score_samples, np.array_split(samples, thread_count)))

kde = KernelDensity(bandwidth=2.0,atol=0.0005,rtol=0.01).fit(sample) 
kde_result = parrallel_score_samples(kde, sample)

20220924 -

在前面部分,对于参数bandwidth都是通过交叉验证,来实现的,对于一维数据来说,存在一些经典方法来解决,例如scipy库下的高斯KDE就存在两种方法来进行设置。但是对于这个部分,我并不是非常理解,目前遇到的问题是,利用不同库来进行设置,发现绘制出来的图像不太一样,见[2],具体看了看回答,感觉应该是由于这部分底层实现不太一样导致的。


20220924 -

在sklearn中的KDE,我记得在函数内部中,是可以计算这个累计数据分布(CDF)的,但是在采用scipy的时候,他自身并没有引出这部分内容,也就无法对相应的数值进行计算。文章[3]对这部分进行了介绍,实验表明是可行的。

参考

[1]Scipy: parallel computing in ipython notebook?
[2]Getting bandwidth used by SciPy’s gaussian_kde function
[3]Using scipy gaussian kernel density estimation to calculate CDF inverse

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值