Могу ли я получить пропускную способность, используемую в seaborn kdeplot?

#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. Наиболее релевантный раздел кода находится здесь