#python #seaborn #bandwidth
#python #seaborn #пропускная способность
Вопрос:
Я использую sns.kdeplot(data)
для получения оценки плотности ядра для моего 1-мерного набора данных.
Насколько я понимаю и прочитал документацию seaborn по kdeplot, sns.kdeplot() переходит bw_method="Scott"
к scipy.stats.gaussian_kde
, чтобы автоматически получить полосу пропускания на основе правил для сглаживания рассматриваемого графика kde.
Могу ли я получить доступ к пропускной способности, которая автоматически использовалась seaborn для своего kdeplot? Моя идея состояла в том, чтобы воспроизвести шаги seaborn через scipy.stats.gaussian_kde и применить правило в соответствии с документацией len(data)**(-1./(1 4))
(правило Скотта), чтобы получить значение для bw, но я нахожу полученное значение для создания kdeplot, визуально отличающегося от графика seaborn. Другими словами, что такое bw_rule, так что sns.kdeplot(data,bw=bw_rule) == sns.kdeplot(data)
?
Комментарии:
1. Ну, я получил это (если кто-нибудь пишет это или любопытно) через kde_gaussian.covariance_factor()*np.std(данные), но мне все еще интересно, хранятся ли они где-то в sns, к которым можно получить прямой доступ вместо пересчета?
2. Я попробовал KDEUnivariate с «scott» -1.059 * A * nobs ** (-1 / 5.) согласно вашему комментарию, но со смешанными результатами. Kdeplot часто не соответствует KDE seaborn. Однако kde_gaussian.covariance_factor()*np.std(данные) теперь кажется идентичным sns.kdeplot при построении правила для seaborns. Похоже, что идентификатор сохраняется для всех выборочных данных, которые я пробовал до сих пор, но еще слишком рано обобщать. Из любопытства, где написано, что seaborn использует kdeunivariate? Глядя на этот документ , кажется, что он ссылается на scipy.stats.gaussian_kde .
3. Спасибо, да, вероятно, с тех пор это могло измениться. Кажется, что источник github импортирует gaussian_kde [строка 36].
4. seaborn 0.11 использует исключительно scipy для вычислений KDE. До этого использовались либо statsmodels, либо scipy, либо, в зависимости от того, был ли установлен первый. Существуют некоторые различия в том, как эти две библиотеки интерпретируют параметр пропускной способности (scipy использует его непосредственно как sd ядра; в scipy это мультипликативный коэффициент, который масштабирует sd данных для получения размера ядра). Это одна из причин , по которой серверная часть была упрощена.
5. Наиболее релевантный раздел кода находится здесь