TGViewer
Data Science | Вопросы собесов Data Science | Вопросы собесов @easy_ds · 4.89K subscribers
Post #2536 418
🤔 Как сгенирировать распределение исходя из выборок?

Генерация распределения из выборок данных включает использование методов оценки плотности и генерации новых данных, которые соответствуют распределению исходных данных. Один из наиболее популярных методов — это использование оценки плотности ядра (KDE, Kernel Density Estimation). Также можно использовать другие методы, такие как метод исторгаммы или моделирование распределений с использованием параметрических подходов (например, нормальное распределение).

🚩Методы генерации распределения из выборок

🟠Оценка плотности ядра (KDE)
KDE сглаживает данные, чтобы создать непрерывное аппроксимированное распределение, основанное на данных выборки. Для реализации KDE можно использовать библиотеку scipy или seaborn.

🟠Гистограмма
Гистограмма разбивает данные на бины и оценивает плотность данных в каждом бине. Это простой способ оценки распределения данных.

🟠Параметрическое моделирование
Можно подогнать данные к известным распределениям (например, нормальное, экспоненциальное) и использовать параметры этого распределения для генерации новых данных.

🚩Примеры генерации распределения в Python

Использование KDE с библиотекой seaborn
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# Пример данных
data = np.random.normal(loc=0, scale=1, size=1000)

# Оценка плотности ядра (KDE)
sns.kdeplot(data, shade=True)
plt.title("Kernel Density Estimation (KDE)")
plt.show()


Использование KDE с библиотекой scipy
import numpy as np
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt

# Пример данных
data = np.random.normal(loc=0, scale=1, size=1000)

# Оценка плотности ядра (KDE)
kde = gaussian_kde(data)

# Создание новых данных на основе KDE
x = np.linspace(min(data), max(data), 1000)
kde_values = kde(x)

plt.plot(x, kde_values)
plt.title("Kernel Density Estimation (KDE)")
plt.show()


Генерация новых данных из KDE
# Генерация новых данных на основе оцененного распределения
new_samples = kde.resample(size=1000).T[0]

plt.hist(new_samples, bins=30, density=True, alpha=0.5, label='Generated Data')
sns.kdeplot(data, shade=True, label='Original Data')
plt.title("Generated Data vs Original Data")
plt.legend()
plt.show()


Параметрическое моделирование (нормальное распределение)
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# Пример данных
data = np.random.normal(loc=0, scale=1, size=1000)

# Оценка параметров нормального распределения
mu, std = norm.fit(data)

# Генерация новых данных
new_data = np.random.normal(loc=mu, scale=std, size=1000)

plt.hist(new_data, bins=30, density=True, alpha=0.5, label='Generated Data')
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2, label='Fitted Distribution')
plt.title("Generated Data with Fitted Distribution")
plt.legend()
plt.show()


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
More from @easy_ds
  1. Oct 12, 2026🤔 Как решить задачу, где присутствует одновременно два target – один categorical, другой…
  2. Oct 12, 2026🤔 Как происходит детекция без anchor box-ов? Обнаружение объектов без использования ancho…
  3. Oct 12, 2026Post #2701
  4. Oct 11, 2026🤔 Что такое декоратор? Это функция, модифицирующая или расширяющая поведение другой функц…
  5. Oct 11, 2026Post #2699
  6. Oct 11, 2026🤔 Как валидировать временные ряды ? Валидация временных рядов требует специальных подходо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →