Spec-Zone.ru › NumPy 1.15

numpy.histogram_bin_edges

numpy.histogram_bin_edges(a, bins=10, range=None, weights=None) [source]

Функция для вычисления только границ бинов, используемых функцией histogram.

Параметры:
a : array_like

Входные данные. Гистограмма вычисляется по сплющенному массиву.

bins : int or sequence of scalars or str, optional

Если bins является целым числом, оно определяет количество равномерных бинов в заданном диапазоне (по умолчанию 10). Если bins является последовательностью, она определяет границы бинов, включая правую границу, что позволяет использовать неравномерную ширину бинов.

Если bins является строкой из списка ниже, histogram_bin_edges будет использовать выбранный метод для вычисления оптимальной ширины бина и, следовательно, количества бинов (см. Notes для получения более подробной информации об оценщиках) из данных, которые попадают в запрашиваемый диапазон. В то время как ширина бина будет оптимальной для фактических данных в диапазоне, количество бинов будет вычислено для заполнения всего диапазона, включая пустые части. Для визуализации рекомендуется использовать опцию «auto». Данные с весами не поддерживаются для автоматического выбора размера бина.

‘auto’

Максимум из оценщиков ‘sturges’ и ‘fd’. Обеспечивает хорошую общую производительность.

‘fd’ (Оценка Фридмана-Диконаса)

Робастная (устойчивая к выбросам) оценка, которая учитывает изменчивость данных и размер данных.

‘doane’

Улучшенная версия оценки Стерджеса, которая работает лучше с наборами данных, не являющимися нормальными.

‘scott’

Менее робастная оценка, учитывающая изменчивость данных и размер данных.

‘rice’

Оценка не учитывает изменчивость, а только размер данных. Часто переоценивает необходимое количество бинов.

‘sturges’

Метод по умолчанию в R, учитывает только размер данных. Оптимален только для нормальных данных и недооценивает количество бинов для больших наборов данных, не являющихся нормальными.

‘sqrt’

Оценка квадратного корня (от размера данных), используемая Excel и другими программами из-за скорости и простоты.

range : (float, float), optional

Нижний и верхний пределы бинов. Если не указано, диапазон просто (a.min(), a.max()). Значения вне диапазона игнорируются. Первый элемент диапазона должен быть меньше или равен второму. range также влияет на автоматическое вычисление бинов. В то время как ширина бина вычисляется как оптимальная на основе фактических данных в range, количество бинов будет заполнять весь диапазон, включая части, не содержащие данных.

weights : array_like, optional

Массив весов, имеющий такую же форму, как и a. Каждое значение в a вносит свой связанный вес в счет бинов (вместо 1). В настоящее время это не используется ни одним из оценщиков бинов, но может быть использовано в будущем.

Возвращаемое значение:
bin_edges : array of dtype float

Границы, которые нужно передать в histogram

См. также

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’

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)}}

Улучшенная версия формулы Стерджеса, которая дает лучшие оценки для наборов данных, не являющихся нормальными. Этот оценщик пытается учесть асимметрию данных.

‘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; hist1
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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.15.4/reference/generated/numpy.histogram_bin_edges.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API