web-dev-qa-db-de.com

So wählen Sie Bins im Matplotlib-Histogramm aus

Kann mir jemand erklären, was "Bins" im Histogramm sind (die Matplotlib-Hist Funktion)? Angenommen, ich muss die Wahrscheinlichkeitsdichtefunktion einiger Daten aufzeichnen. Wie beeinflussen die ausgewählten Bins dies? und wie wähle ich sie aus? (Ich habe darüber schon in den Bibliotheken matplotlib.pyplot.hist und den numpy.histogram gelesen, aber ich habe keine Ahnung.)

22
H.H

Der Parameter bins gibt die Anzahl der Fächer an, in die Ihre Daten unterteilt werden. Sie können es als Ganzzahl oder als Liste von Bin-Kanten angeben.

Zum Beispiel bitten wir hier um 20 Behälter:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)
plt.hist(x, bins=20)

enter image description here

Und hier fragen wir nach den Behälterkanten an den Stellen [-4, -3, -2 ... 3, 4].

plt.hist(x, bins=range(-4, 5))

enter image description here

Ihre Frage nach der Wahl der "besten" Anzahl von Behältern ist interessant, und es gibt tatsächlich eine ziemlich umfangreiche Literatur zu diesem Thema. Es wurden einige häufig verwendete Faustregeln vorgeschlagen (z. B. die Freedman-Diaconis-Regel , Sturges-Regel, Scott-Regel, die Quadratwurzelregel usw. ) Jeder hat seine eigenen Stärken und Schwächen.

Wenn Sie eine Nice-Python-Implementierung einer Vielzahl dieser Histogrammregeln für das automatische Anpassen wünschen, können Sie die Histogrammfunktion in der neuesten Version des AstroPy-Pakets hier beschrieben ..__ überprüfen plt.hist, aber Sie können Syntax wie verwenden, z hist(x, bins='freedman') für die Auswahl von Behältern über die oben genannte Freedman-Diaconis-Regel.

Mein persönlicher Favorit ist "Bayesian Blocks" (bins="blocks"), der für optimales Binning mit ungleichen Bin-Breiten aufgelöst wird. Sie können etwas mehr über das hier lesen.


Bearbeiten, April 2017: Mit Matplotlib Version 2.0 oder höher und Numpy Version 1.11 oder höher können Sie jetzt automatisch ermittelte Ablagen direkt in Matplotlib angeben, indem Sie z. bins='auto'. Hierbei wird das Maximum der Bin-Auswahl für Sturges und Freedman-Diaconis verwendet. Weitere Informationen zu den Optionen finden Sie in den numpy.histogram-Dokumenten .

32
jakevdp

Bins sind die Anzahl der Intervalle, in die Sie alle Ihre Daten einteilen möchten, sodass sie als Balken in einem Histogramm angezeigt werden können. Eine einfache Methode, um zu ermitteln, wie viele Behälter geeignet sind, besteht darin, die Quadratwurzel der Gesamtzahl der Werte in Ihrer Verteilung zu ermitteln.

4
Oliver Angelil

Sie sind zu Recht in der Erwartung, dass die Anzahl der Fächer einen wesentlichen Einfluss auf die Annäherung an die tatsächliche zugrunde liegende Verteilung hat. Ich habe die Originalarbeit nicht selbst gelesen, aber laut Scott 1979 gilt als Faustregel: 

R (n ^ (1/3))/(3.49σ)

woher 

  • R ist der Datenbereich (in Ihrem Fall R = 3 - (- 3) = 6), 

  • n ist die Anzahl der Proben, 

  • σ ist Ihre Standardabweichung. 

0
idnavid

Zur Ergänzung von jakes answer können Sie numpy.histogram_bin_edges verwenden, wenn Sie nur die optimalen Bin-Kanten berechnen möchten, ohne das Histogramm zu erstellen. histogram_bin_edges ist eine Funktion, die speziell für die optimale Berechnung von Behälterkanten entwickelt wurde. Sie können sieben verschiedene Algorithmen für die Optimierung auswählen. 

0
gerrit