首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scikit带宽的差异-学习状态模型的KDE和多元KDE

scikit带宽的差异-学习状态模型的KDE和多元KDE
EN

Stack Overflow用户
提问于 2021-04-21 05:52:40
回答 1查看 602关注 0票数 0

我正在生成一个5000 *6数组,并使用来自scikit学习的KDE和来自statsmodel的MultivariateKDE来评估ln(概率密度)。由于两种方法都可以处理多维数据,所以我希望使用这两种方法都能得到相同的结果。但是,结果是不同的。当我查看带宽的价值时,我看到了scikit--学习KDE使用标量值来表示带宽,而多元KDE使用一维数组来表示带宽。

那么,哪个带宽是正确的?

我正在附加下面的代码片段,

代码语言:javascript
复制
# Generating random data
rng = np.random.RandomState(42)
X = rng.random_sample((5000,6))

# Using Grid search to get the best bandwidth
params = {'bandwidth': np.logspace(-1, 1, 20)}
grid = GridSearchCV(KernelDensity(), params)
grid.fit(X)
print("best bandwidth for scikit-learn: {0}".format(grid.best_estimator_.bandwidth))

# Using scikit-learn kde
kde = KernelDensity(kernel='gaussian', bandwidth=grid.best_estimator_.bandwidth).fit(X)
log_density = kde.score_samples(X)

# Using Multivariate KDE from statsmodels
kde = sm.nonparametric.KDEMultivariate(data=X, var_type='cccccc', bw='normal_reference')
log_density_stat = np.log(kde.pdf(X))
print("best bandwidth for statsmodels : ", kde.bw)

相应的输出如下,

代码语言:javascript
复制
best bandwidth for scikit-learn: 0.1
best bandwidth for statsmodels :  [0.12904    0.13105721 0.12936657 0.13071426 0.13008811 0.13102085]
EN

回答 1

Stack Overflow用户

发布于 2021-04-21 10:33:24

没有“正确”的带宽本身,您只是从两种不同的方法中获得两个带宽值,第一种是寻找唯一值(使用单变量网格搜索),第二种是查找多个值,使用斯科特经验法则估计,如GenericKDE所示。

带宽的值对应于带宽矩阵的对角线:它们都是与scikit-learn的估计相等的,并且可能与状态模型的估计不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67189978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档