Генерация распределения из выборок данных включает использование методов оценки плотности и генерации новых данных, которые соответствуют распределению исходных данных. Один из наиболее популярных методов — это использование оценки плотности ядра (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()
Ставь 👍 и забирай 📚 Базу знаний