numpy.histogram_bin_edges #
- 麻木的。histogram_bin_edges ( a , bins = 10 , range = None , Weights = None ) [来源] #
仅计算函数使用的 bin 边缘的函数
histogram
。- 参数:
- 类似数组
输入数据。直方图是在展平的数组上计算的。
- bins int 或标量序列或 str,可选
如果bins是 int,则它定义给定范围内等宽 bin 的数量(默认为 10)。如果bins是一个序列,则它定义 bin 边缘,包括最右边缘,从而允许不均匀的 bin 宽度。
如果bins是下面列表中的字符串,则将使用所选方法根据落在请求范围内的数据
histogram_bin_edges
计算最佳 bin 宽度,从而计算 bin 数量(有关估计器的更多详细信息,请参阅注释)。虽然箱宽度对于范围内的实际数据来说是最佳的,但是箱的数量将被计算以填充整个范围,包括空白部分。对于可视化,建议使用“自动”选项。自动 bin 大小选择不支持加权数据。- '汽车'
“sturges”和“fd”估计器的最大值。提供良好的全方位性能。
- 'fd'(Freedman Diaconis 估计器)
鲁棒(对异常值具有弹性)估计器,考虑了数据可变性和数据大小。
- '多恩'
Sturges 估计器的改进版本,可以更好地处理非正态数据集。
- '斯科特'
考虑数据可变性和数据大小的鲁棒性较差的估计器。
- '石头'
基于积分平方误差的留一法交叉验证估计的估计器。可以看作是斯科特规则的概括。
- '米'
估计器不考虑变异性,只考虑数据大小。通常会高估所需的垃圾箱数量。
- “斯特吉斯”
R的默认方法,只考虑数据大小。仅适用于高斯数据,并且低估了大型非高斯数据集的 bin 数量。
- '开方'
(数据大小的)平方根估计器,由于其速度和简单性而被 Excel 和其他程序使用。
- 范围(浮动、浮动),可选
垃圾箱的下限和上限范围。如果未提供,范围只是。超出范围的值将被忽略。范围的第一个元素必须小于或等于第二个元素。范围也会影响自动 bin 计算。虽然 bin 宽度根据range内的实际数据计算为最佳,但 bin 计数将填充整个范围,包括不包含数据的部分。
(a.min(), a.max())
- 权重数组,可选
权重数组,形状与相同。a中的每个值 仅对 bin 计数贡献其相关权重(而不是 1)。目前任何 bin 估计器都没有使用此功能,但将来可能会使用。
- 返回:
- bin_edges dtype float 数组
要传入的边
histogram
也可以看看
笔记
估计最佳箱数的方法在文献中已有充分依据,并且受到 R 为直方图可视化提供的选择的启发。请注意,垃圾箱的数量与\(n^{1/3}\)是渐近最优的,这就是它出现在大多数估计器中的原因。这些只是简单的插件方法,为 bin 数量提供了良好的起点。在下面的等式中,\(h\)是 binwidth 和\(n_h\)是垃圾箱的数量。所有计算 bin 计数的估计器都使用
ptp
数据的 重新转换为 bin 宽度。最终的 bin 计数是从 获得的 。最终的箱宽度通常小于下面的估计器返回的宽度。np.round(np.ceil(range / h))
- 'auto'('sturges' 和 'fd' 估计器的最大值)
为了获得良好的价值而做出的妥协。对于小型数据集,通常会选择 Sturges 值,而较大的数据集通常会默认为 FD。避免了 FD 和 Sturges 分别对于小型和大型数据集的过于保守的行为。切换点通常是\(a.size \approx 1000\)。
- 'fd'(Freedman Diaconis 估计器)
- \[h = 2 \frac{IQR}{n^{1/3}}\]
binwidth 与四分位数范围 (IQR) 成正比,与 a.size 的立方根成反比。对于小型数据集可能过于保守,但对于大型数据集来说相当不错。 IQR 对于异常值非常稳健。
- '斯科特'
- \[h = \sigma \sqrt[3]{\frac{24 \sqrt{\pi}}{n}}\]
binwidth 与数据的标准差成正比,与 的立方根成反比
x.size
。对于小型数据集可能过于保守,但对于大型数据集来说相当不错。标准差对于异常值不是很稳健。在没有异常值的情况下,值与 Freedman-Diaconis 估计量非常相似。 - '米'
- \[n_h = 2n^{1/3}\]
bin 的数量仅与 的立方根成正比
a.size
。它往往会高估分箱的数量,并且没有考虑数据的可变性。 - “斯特吉斯”
- \[n_h = \log _{2}(n) + 1\]
bin 的数量是以 2 为底的对数
a.size
。该估计量假设数据呈正态性,对于较大的非正态数据集来说过于保守。这是R方法中的默认方法hist
。 - '多恩'
- \[ \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} \]
斯特吉斯公式的改进版本,可为非正态数据集生成更好的估计。该估计器尝试考虑数据的偏差。
- '开方'
- \[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. ])
为了与直方图保持一致,预先计算的 bin 数组未经修改地传递:
>>> np.histogram_bin_edges(arr, [1, 2]) array([1, 2])
此函数允许计算一组 bin,并在多个直方图中重复使用:
>>> 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. ])