Плотности с частотой

Два графика ниже передают примерно одинаковую информацию.

  • Гистограмма слева - это гистограмма, на которой ось Y представляет частоты (то есть, как часто мы видим значения в пределах диапазона, связанного с каждой ячейкой).

  • Справа - плотность (оценка KDE). Ось Y представляет плотность (интеграл должен составлять единицу).

Я обычно предпочитаю график плотности (вы можете отрегулировать его, но ось Y обычно труднее интерпретировать.

Я знаю, что оценка KDE вернет плотность, которая в сумме составляет 1, при условии, что область значений переменной простирается от -Inf до Inf, но есть ли способ сопоставить PDF, полученный в результате оценки KDE, с частотами (например, масштабирование значений до есть частоты)?

Это просто вопрос "масштабирования" оси? Или есть еще что-нибудь?

плотность против частоты


person Amelio Vazquez-Reina    schedule 05.09.2014    source источник
comment
Я раньше не использовал графики плотности в matplotlib; однако вы можете добиться чего-то вроде того, что вы описываете, с помощью преобразования или twinx () - см. http://matplotlib.org/examples/api/two_scales.html   -  person Maximus    schedule 05.09.2014
comment
это возможно с seaborn напрямую. см. web.stanford.edu/~mwaskom/software/seaborn/ examples /   -  person Paul H    schedule 10.09.2014


Ответы (1)


Сначала вам нужно будет рассчитать точки плотности, а затем построить график. Прочтите http://scikit-learn.org/stable/modules/de density.html. Некоторый код:

from sklearn.neighbors.kde import KernelDensity
import numpy as np
import matplotlib.pyplot as plt 

# This X is your data for the histogram
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
X = X.reshape(-1, 1)

kde = KernelDensity(kernel='gaussian', bandwidth=1).fit(X)
x = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)

density = np.exp(kde.score_samples(x))

plt.plot(x, density)
plt.show()

введите описание изображения здесь

person xbello    schedule 05.09.2014
comment
Спасибо. Я смущен. Почему ваша ось Y отрицательна? Разве интеграл не должен составлять 1? - person Amelio Vazquez-Reina; 05.09.2014
comment
Спасибо! Я предполагаю, что чего еще не хватает, так это того, как масштабировать это, чтобы оно представляло частоты (как указано в OP). Интересно, справится ли с этим простой 1/density? - person Amelio Vazquez-Reina; 05.09.2014
comment
Я думаю, вы можете очень легко деконволютировать (это слово?) Частоту до необработанных данных. Предположим, у вас есть {A: 0,6, B: 0,3, C: 0,1}. Вы можете получить [A, A, A, A, A, A, B, B, B, C] из этого, если вы знаете общее количество случаев и представляете плотность. - person xbello; 05.09.2014