Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу для скачивания полного примера кода. или запустите этот пример в вашем браузере через JupyterLite или Binder

Оценка плотности ядра

Этот пример демонстрирует, как оценка плотности ядра (KDE), мощный непараметрический метод оценки плотности, может использоваться для обучения генеративной модели для набора данных. С этой генеративной моделью можно создавать новые образцы. Эти новые образцы отражают основную модель данных.

Selection from the input data,
best bandwidth: 3.79269019073225
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KernelDensity

# load the data
digits = load_digits()

# project the 64-dimensional data to a lower dimension
pca = PCA(n_components=15, whiten=False)
data = pca.fit_transform(digits.data)

# use grid search cross-validation to optimize the bandwidth
params = {"bandwidth": np.logspace(-1, 1, 20)}
grid = GridSearchCV(KernelDensity(), params)
grid.fit(data)

print("best bandwidth: {0}".format(grid.best_estimator_.bandwidth))

# use the best estimator to compute the kernel density estimate
kde = grid.best_estimator_

# sample 44 new points from the data
new_data = kde.sample(44, random_state=0)
new_data = pca.inverse_transform(new_data)

# turn data into a 4x11 grid
new_data = new_data.reshape((4, 11, -1))
real_data = digits.data[:44].reshape((4, 11, -1))

# plot real digits and resampled digits
fig, ax = plt.subplots(9, 11, subplot_kw=dict(xticks=[], yticks=[]))
for j in range(11):
    ax[4, j].set_visible(False)
    for i in range(4):
        im = ax[i, j].imshow(
            real_data[i, j].reshape((8, 8)), cmap=plt.cm.binary, interpolation="nearest"
        )
        im.set_clim(0, 16)
        im = ax[i + 5, j].imshow(
            new_data[i, j].reshape((8, 8)), cmap=plt.cm.binary, interpolation="nearest"
        )
        im.set_clim(0, 16)

ax[0, 5].set_title("Selection from the input data")
ax[5, 5].set_title('"New" digits drawn from the kernel density model')

plt.show()

Общее время выполнения скрипта: (0 минут 4.534 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_digits_kde_sampling.ipynb

Download Python source code: plot_digits_kde_sampling.py

Download zipped: plot_digits_kde_sampling.zip

Связанные примеры

Рекурсивная элиминация признаков

Распознавание рукописных цифр

Простая оценка плотности ядра в 1D

Объединение признаков

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/neighbors/plot_digits_kde_sampling.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API