/ / Вземане на проби от изчислена многовариантна оценка на плътността на ядрото - питон, машинно обучение, статистика, плътност на ядрото

Вземане на проби от изчислената мултивариантна оценка на плътността на ядрото - питън, машинно учене, статистика, ядро-плътност

Да кажем, че имам X и Y координати на картата и непараметрично разпределение на "горещите зони" (например степен на замърсяване на географска карта, разположена в координати X и Y). Моите входни данни са топлинни карти.

Искам да тренирам модел за машинно обучениенаучава как изглежда "гореща зона", но нямам много етикетирани примери. Всички "горещи зони" изглеждат доста сходни, но може да са в различни части на моята стандартизирана XY координатна карта.

Мога да изчисля мултивариантен KDE и графиката накарти на плътността съответно. За да генерираме синтезирани етикетирани данни, мога ли да "обърна" KDE и произволно да генерирам нови графични файлове с наблюдения, които попадат в "плътния" диапазон на KDE?

Има ли някакъв начин да направите това в питън?

Отговори:

3 за отговор № 1

Налични са най-малко 3 висококачествени реализации за оценка на плътността на ядрото за python:

Моето лично класиране е statsmodels> scikit-learn> scipy (най-доброто до най-лошото) но това ще зависи от вашия случай на употреба.

Някои случайни забележки:

  • scikit-learn предлага безплатно вземане на проби от инсталиран KDE (kde.sample(N))
  • scikit-learn предлага добри функции за кръстосано валидиране на базата на мрежово търсене или случайно търсене (силно се препоръчва кръстосана проверка)
  • statsmodels предлага методи за кръстосано валидиране, базирани на оптимизация (може да бъде бавно за големи масиви от данни, но много висока точност)

Има много повече различия и някои от тях са анализирани в това много добро блог пост от Джейк ВандерПлас, Следната таблица е извадка от тази публикация:

От: https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/ (Джейк ВандерПлас) От: https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/ (Автор: Джейк ВандерПлас)

Ето някои примерни кодове scikit-научите:

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()

изход:

въведете описанието на изображението тук