numpy.histogram_bin_edges#
- numpy.histogram_bin_edges(a, bins=10, range=None, веса=None)[источник]#
Функция для вычисления только границ бинов, используемых
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количество бинов заполнит весь диапазон, включая участки, не содержащие данных.- весаarray_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’)
Компромисс для получения хорошего значения. Для небольших наборов данных обычно выбирается значение Sturges, в то время как для больших наборов данных обычно по умолчанию используется FD. Избегает излишне консервативного поведения FD и Sturges для малых и больших наборов данных соответственно. Точка переключения обычно \(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. Этот оценщик предполагает нормальность данных и слишком консервативен для больших ненормальных наборов данных. Это метод по умолчанию в R'shistметод. - ‘doane’
- \[ \begin{align}\begin{aligned}n_h = 1 + \log_{2}(n) + \log_{2}\left(1 + \frac{|g_1|}{\sigma_{g_1}}\right)\\g_1 = mean\left[\left(\frac{x - \mu}{\sigma}\right)^3\right]\\\sigma_{g_1} = \sqrt{\frac{6(n - 2)}{(n + 1)(n + 3)}}\end{aligned}\end{align} \]
Улучшенная версия формулы Стерджеса, которая дает лучшие оценки для ненормальных наборов данных. Этот оценщик пытается учесть асимметрию данных.
- ‘sqrt’
- \[n_h = \sqrt n\]
Самый простой и быстрый оценщик. Учитывает только размер данных.
Кроме того, если данные имеют целочисленный тип, то ширина бина никогда не будет меньше 1.
Примеры
>>> import numpy as np >>> 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. ])