numpy.histogram_bin_edges
- numpy.histogram_bin_edges(a, bins=10, range=None, weights=None)[source]
-
Функция для вычисления только границ бинов, используемых функцией
histogram.- Параметры
-
- aarray_like
-
Входные данные. Гистограмма вычисляется по уплощенному массиву.
- binsint или последовательность скаляров или str, необязательно
-
Если
bins— целое число, оно определяет количество равномерно распределенных бинов в заданном диапазоне (10 по умолчанию). Еслиbins— последовательность, она определяет границы бинов, включая правую границу, что позволяет использовать неравномерную ширину бинов.Если
bins— строка из списка ниже,histogram_bin_edgesбудет использовать выбранный метод для вычисления оптимальной ширины бина и, следовательно, количества бинов (см.Notesдля более подробной информации об оценщиках) из данных, попадающих в указанный диапазон. Хотя ширина бина будет оптимальной для фактических данных в диапазоне, количество бинов будет вычислено для заполнения всего диапазона, включая пустые участки. Для визуализации рекомендуется использовать опцию ‘auto’. Данные с весами не поддерживаются для автоматического выбора размера бина.- ‘auto’
-
Максимум оценщиков ‘sturges’ и ‘fd’. Обеспечивает хорошую общую производительность.
- ‘fd’ (оценщик Фридмана-Дикона)
-
Устойчивый (устойчивый к выбросам) оценщик, учитывающий изменчивость данных и размер данных.
- ‘doane’
-
Улучшенная версия оценщика Стерджеса, которая лучше работает с ненормализованными наборами данных.
- ‘scott’
-
Менее устойчивый оценщик, который учитывает изменчивость данных и размер данных.
- ‘stone’
-
Оценщик, основанный на оценке перекрестной проверки с выбросом одного значения интегральной квадратичной ошибки. Может рассматриваться как обобщение правила Скотта.
- ‘rice’
-
Оценщик не учитывает изменчивость, только размер данных. Часто переоценивает необходимое количество бинов.
- ‘sturges’
-
Метод по умолчанию в R, учитывает только размер данных. Оптимален только для гауссовых данных и недооценивает количество бинов для больших наборов не-гауссовых данных.
- ‘sqrt’
-
Оценщик квадратного корня (из размера данных), используемый в Excel и других программах из-за его скорости и простоты.
- range(float, float), необязательно
-
Диапазон нижнего и верхнего бинов. Если не указан, диапазон просто
(a.min(), a.max()). Значения вне диапазона игнорируются. Первый элемент диапазона должен быть меньше или равен второму.rangeтакже влияет на автоматическое вычисление бинов. Хотя ширина бина вычисляется как оптимальная на основе фактических данных внутриrange, количество бинов заполнит весь диапазон, включая части, не содержащие данных. - weightsarray_like, необязательно
-
Массив весов, имеющий такую же форму, что и
a. Каждое значение вaвносит свой связанный вес в счет бинов (вместо 1). В настоящее время это не используется ни одним из оценщиков бинов, но, возможно, будет в будущем.
- Возвращает
-
- bin_edgesмассив типа float
-
Границы для передачи в
histogram
См. также
Примечания
Методы оценки оптимального количества бинов хорошо обоснованы в литературе и вдохновлены выбором, который предоставляет R для визуализации гистограмм. Обратите внимание, что количество бинов, пропорциональное \(n^{1/3}\), асимптотически оптимально, поэтому оно появляется в большинстве оценщиков. Это просто подключаемые методы, которые дают хорошие начальные точки для количества бинов. В уравнениях ниже, \(h\) — ширина бина, а \(n_h\) — количество бинов. Все оценщики, которые вычисляют количество бинов, пересчитываются в ширину бина с помощью
ptpданных. Окончательное количество бинов получается изnp.round(np.ceil(range / h)). Окончательная ширина бина часто меньше, чем возвращается оценщиками ниже.- ‘auto’ (максимум оценщиков ‘sturges’ и ‘fd’)
-
Компромисс для получения хорошего значения. Для небольших наборов данных обычно выбирается значение Стерджеса, а для больших наборов данных по умолчанию используется FD. Избегает чрезмерно консервативного поведения FD и Стерджеса для небольших и больших наборов данных соответственно. Точка переключения обычно \(a.size \approx 1000\).
- ‘fd’ (оценщик Фридмана-Дикона)
-
\[h = 2 \frac{IQR}{n^{1/3}}\]
Ширина бина пропорциональна межквартильному размаху (IQR) и обратно пропорциональна кубическому корню от a.size. Может быть слишком консервативным для небольших наборов данных, но довольно хорош для больших наборов данных. IQR очень устойчив к выбросам.
- ‘scott’
-
\[h = \sigma \sqrt[3]{\frac{24 * \sqrt{\pi}}{n}}\]
Ширина бина пропорциональна стандартному отклонению данных и обратно пропорциональна кубическому корню от
x.size. Может быть слишком консервативным для небольших наборов данных, но довольно хорош для больших наборов данных. Стандартное отклонение не очень устойчиво к выбросам. Значения очень похожи на оценщик Фридмана-Дикона при отсутствии выбросов. - ‘rice’
-
\[n_h = 2n^{1/3}\]
Количество бинов пропорционально только кубическому корню от
a.size. Он имеет тенденцию переоценивать количество бинов и не учитывает изменчивость данных. - ‘sturges’
-
\[n_h = \log _{2}n+1\]
Количество бинов равно логарифму по основанию 2 от
a.size. Этот оценщик предполагает нормальность данных и слишком консервативен для больших, ненормальных наборов данных. Это метод по умолчанию в методеhistR. - ‘doane’
-
\[ \begin{align}\begin{aligned}n_h = 1 + \log_{2}(n) + \log_{2}(1 + \frac{|g_1|}{\sigma_{g_1}})\\g_1 = mean[(\frac{x - \mu}{\sigma})^3]\\\sigma_{g_1} = \sqrt{\frac{6(n - 2)}{(n + 1)(n + 3)}}\end{aligned}\end{align} \]
Улучшенная версия формулы Стерджеса, которая дает лучшие оценки для ненормализованных наборов данных. Этот оценщик пытается учесть скошенность данных.
- ‘sqrt’
-
\[n_h = \sqrt n\]
Самый простой и быстрый оценщик. Учитывает только размер данных.
Примеры
>>> arr = np.array([0, 0, 0, 1, 2, 3, 3, 4, 5]) >>> np.histogram_bin_edges(arr, bins='auto', range=(0, 1)) array([0. , 0.25, 0.5 , 0.75, 1. ]) >>> np.histogram_bin_edges(arr, bins=2) array([0. , 2.5, 5. ])
Для согласованности с гистограммой массив предварительно вычисленных бинов передается без изменений:
>>> np.histogram_bin_edges(arr, [1, 2]) array([1, 2])
Эта функция позволяет вычислить один набор бинов и повторно использовать его в нескольких гистограммах:
>>> shared_bins = np.histogram_bin_edges(arr, bins='auto') >>> shared_bins array([0., 1., 2., 3., 4., 5.])
>>> group_id = np.array([0, 1, 1, 0, 1, 1, 0, 1, 1]) >>> hist_0, _ = np.histogram(arr[group_id == 0], bins=shared_bins) >>> hist_1, _ = np.histogram(arr[group_id == 1], bins=shared_bins)
>>> hist_0; hist_1 array([1, 1, 0, 1, 0]) array([2, 0, 1, 1, 2])
Что дает результаты, которые легче сравнивать, чем использование отдельных бинов для каждой гистограммы:
>>> hist_0, bins_0 = np.histogram(arr[group_id == 0], bins='auto') >>> hist_1, bins_1 = np.histogram(arr[group_id == 1], bins='auto') >>> hist_0; hist_1 array([1, 1, 1]) array([2, 1, 1, 2]) >>> bins_0; bins_1 array([0., 1., 2., 3.]) array([0. , 1.25, 2.5 , 3.75, 5. ])
© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.histogram_bin_edges.html