gpt4 book ai didi

python - 从计算的多元核密度估计中采样

转载 作者:行者123 更新时间:2023-11-30 08:54:29 28 4
gpt4 key购买 nike

假设我在 map 上有 X 和 Y 坐标以及“热区”的非参数分布(例如,位于 X 和 Y 坐标的地理 map 上的污染程度)。我的输入数据是热图。

我想训练一个机器学习模型来了解“热区”是什么样子,但我没有很多带标签的示例。所有“热区”看起来都非常相似,但可能位于我的标准化 XY 坐标图的不同部分。

我可以计算多元 KDE 并相应地绘制密度图。要生成合成标记数据,我可以“反转”KDE 并随机生成新的图像文件,其观察结果落在我的 KDE“密集”范围内吗?

有什么办法可以在Python中做到这一点吗?

最佳答案

至少有 3 个高质量的核密度估计实现可用于 Python:

我的个人排名是statsmodels > scikit-learn > scipy(最好到最差),但这取决于您的用例。

一些随机评论:

  • scikit-learn 免费提供安装 KDE 的采样 (kde.sample(N))
  • scikit-learn 提供了基于网格搜索或随机搜索的良好交叉验证功能(强烈建议使用交叉验证)
  • statsmodels 提供基于优化的交叉验证方法(对于大数据集可能会很慢;但准确性非常高)

还有更多差异,其中一些差异已在这篇非常好的 blog post 中进行了分析。作者:Jake VanderPlas。下表是这篇文章的摘录:

From: https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/ (Jake VanderPlas) 来自:https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/ (作者: jack ·范德普拉斯)

这是一些使用scikit-learn的示例代码:

from sklearn.datasets import make_blobs
from sklearn.neighbors import KernelDensity
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
import numpy as np

# Create test-data
data_x, data_y = make_blobs(n_samples=100, n_features=2, centers=7, cluster_std=0.5, random_state=0)

# Fit KDE (cross-validation used!)
params = {'bandwidth': np.logspace(-1, 2, 30)}
grid = GridSearchCV(KernelDensity(), params)
grid.fit(data_x)
kde = grid.best_estimator_
bandwidth = grid.best_params_['bandwidth']

# Resample
N_POINTS_RESAMPLE = 1000
resampled = kde.sample(N_POINTS_RESAMPLE)

# Plot original data vs. resampled
fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)

for i in range(100):
axs[0,0].scatter(*data_x[i])
axs[0,1].hexbin(data_x[:, 0], data_x[:, 1], gridsize=20)

for i in range(N_POINTS_RESAMPLE):
axs[1,0].scatter(*resampled[i])
axs[1,1].hexbin(resampled[:, 0], resampled[:, 1], gridsize=20)

plt.show()

输出:

enter image description here

关于python - 从计算的多元核密度估计中采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39836779/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com