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будет использовать выбранный метод для расчёта оптимальной ширины бина и, следовательно, количества бинов (подробнее см. раздел Примечания о методах оценки) из данных, попадающих в требуемый диапазон. Хотя ширина бина будет оптимальной для фактических данных в диапазоне, количество бинов будет вычисляться для заполнения всего диапазона, включая пустые части. Для визуализации рекомендуется использовать опцию «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’)
-
Компромисс для получения хорошего значения. Для малых наборов данных обычно выбирается значение 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. Эта оценка предполагает нормальность данных и слишком консервативна для больших, не-нормальных наборов данных. Это метод по умолчанию в методеhistв R. - ‘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\]
Самая простая и быстрая оценка. Учитывает только размер данных.
Примеры
>>> 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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.histogram_bin_edges.html