Может кто-нибудь объяснить мне, что такое "бункеры" в гистограмме (функция matplotlib.pyplot.hist и numpy.histogram, но я не понял эту идею)
Как выбрать бункеры в гистограмме matplotlib
Ответ 1
Параметр bins
указывает количество ящиков, в которые будут разбиты ваши данные. Вы можете указать его как целое число или как список краев бункера.
Например, здесь мы запрашиваем 20 ящиков:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
plt.hist(x, bins=20)
И здесь мы просим края бинов в местах [-4, -3, -2... 3, 4].
plt.hist(x, bins=range(-4, 5))
Ваш вопрос о том, как выбрать "лучшее" количество ящиков, является интересным, и на самом деле существует довольно обширная литература по этому вопросу. Существуют некоторые широко используемые правила, которые были предложены (например, правило Freedman-Diaconis, "Правило Стурджеса" , "Скотт Правило" , "Правило квадратного корня" и т.д.), каждый из которых имеет свои сильные и слабые стороны.
Если вам нужна хорошая реализация Python из множества этих правил автонастройки гистограммы, вы можете проверить функциональность гистограммы в последней версии пакета AstroPy, описано здесь.
Это работает так же, как plt.hist
, но позволяет использовать синтаксис, например, hist(x, bins='freedman')
для выбора бункеров через правило Фридмана-Диакони, упомянутое выше.
Мой личный фаворит - "Байесовские блоки" (bins="blocks"
), который решает для оптимального биннинга с неравной шириной бина. Вы можете прочитать немного больше о здесь.
Изменить, апрель 2017: с matplotlib версии 2.0 или новее и numpy версии 1.11 или новее, теперь вы можете указать автоматически определенные ячейки непосредственно в matplotlib, указав, например. bins='auto'
. Это использует максимум выборки Стурджа и Фридмана-Диакониса. Подробнее о параметрах можно узнать в numpy.histogram
docs.
Ответ 2
Бункты - это количество интервалов, в которые вы хотите разделить все ваши данные, чтобы они отображались в виде столбцов на гистограмме. Простым методом работы с нашим количеством контейнеров является использование квадратного корня из общего числа значений в вашем дистрибутиве.
Ответ 3
Вы правы в ожидании того, что количество бункеров оказывает значительное влияние на приближение истинного базового распределения. Я сам не читал оригинальную бумагу, но согласно Scott 1979, следует использовать хорошее эмпирическое правило:
Р (п ^ (1/3))/(3.49σ)
где
-
R - диапазон данных (в вашем случае R = 3 - (- 3) = 6),
-
n - количество выборок,
-
σ - ваше стандартное отклонение.
Ответ 4
Чтобы дополнить ответ numpy.histogram_bin_edges
, вы можете использовать numpy.histogram_bin_edges
если вы просто хотите вычислить оптимальные ребра бина, фактически не делая гистограмму. histogram_bin_edges
- это функция, специально разработанная для оптимального расчета ребер бина. Вы можете выбрать семь разных алгоритмов для оптимизации.