Halton#
- class scipy.stats.qmc.Halton(d, *, scramble=True, optimization=None, rng=None)[Quelle]#
Halton-Sequenz.
Pseudo-Zufallszahlengenerator, der die Van-der-Corput-Sequenz für mehrere Dimensionen verallgemeinert. Die Halton-Sequenz verwendet die Basis-Zwei-Van-der-Corput-Sequenz für die erste Dimension, Basis-Drei für ihre zweite und Basis-\(p\) für ihre \(n\)-te Dimension, wobei \(p\) die \(n\)-te Primzahl ist.
- Parameter:
- dint
Dimension des Parameterraums.
- scramblebool, optional
Wenn True, wird zufälliges Scrambling gemäß [2] verwendet. Andernfalls wird kein Scrambling durchgeführt. Standard ist True.
- optimization{None, “random-cd”, “lloyd”}, optional
Ob ein Optimierungsschema zur Verbesserung der Qualität nach dem Sampling verwendet werden soll. Beachten Sie, dass dies ein Nachbearbeitungsschritt ist, der nicht garantiert, dass alle Eigenschaften der Stichprobe erhalten bleiben. Standard ist None.
random-cd: zufällige Permutationen von Koordinaten zur Verringerung der zentrierten Diskrepanz. Die beste Stichprobe basierend auf der zentrierten Diskrepanz wird ständig aktualisiert. Das zentrierte dispunktbasierte Sampling zeigt eine bessere Raumfüllungsrobustheit gegenüber 2D- und 3D-Unterprojektionen im Vergleich zur Verwendung anderer Dispunktmaße.lloyd: Stört Stichproben mithilfe eines modifizierten Lloyd-Max-Algorithmus. Der Prozess konvergiert zu gleichmäßig verteilten Stichproben.
Hinzugefügt in Version 1.10.0.
- rng
numpy.random.Generator, optional Zustand des Pseudozufallszahlengenerators. Wenn rng None ist, wird ein neuer
numpy.random.Generatorunter Verwendung von Entropie aus dem Betriebssystem erstellt. Typen außernumpy.random.Generatorwerden annumpy.random.default_rngübergeben, um einenGeneratorzu instanziieren.Geändert in Version 1.15.0: Als Teil der SPEC-007-Umstellung von der Verwendung von
numpy.random.RandomStatezunumpy.random.Generatorwurde dieses Schlüsselwort von seed zu rng geändert. Für eine Übergangszeit werden beide Schlüsselwörter weiterhin funktionieren, obwohl nur eines gleichzeitig angegeben werden darf. Nach der Übergangszeit werden Funktionsaufrufe, die das seed-Schlüsselwort verwenden, Warnungen ausgeben. Nach einer Deputationsperiode wird das seed-Schlüsselwort entfernt.
Methoden
fast_forward(n)Führt die Sequenz um n Positionen vorwärts.
integers(l_bounds, *[, u_bounds, n, ...])Zieht n ganze Zahlen von l_bounds (inklusive) bis u_bounds (exklusive), oder wenn endpoint=True, von l_bounds (inklusive) bis u_bounds (inklusive).
random([n, workers])Zieht n im halboffenen Intervall
[0, 1).reset()Setzt die Engine auf den Grundzustand zurück.
Hinweise
Die Halton-Sequenz weist selbst für mäßig große Dimensionen starke Streifenartefakte auf. Diese können durch Scrambling gemildert werden. Scrambling unterstützt auch replikationsbasierte Fehlerabschätzungen und erweitert die Anwendbarkeit auf unbeschränkte Integranden.
Referenzen
[1]Halton, „On the efficiency of certain quasi-random sequences of points in evaluating multi-dimensional integrals“, Numerische Mathematik, 1960.
[2]A. B. Owen. „A randomized Halton algorithm in R“, arXiv:1706.02808, 2017.
Beispiele
Generieren Sie Stichproben aus einer Quasi-Zufallszahlensequenz von Halton.
>>> from scipy.stats import qmc >>> sampler = qmc.Halton(d=2, scramble=False) >>> sample = sampler.random(n=5) >>> sample array([[0. , 0. ], [0.5 , 0.33333333], [0.25 , 0.66666667], [0.75 , 0.11111111], [0.125 , 0.44444444]])
Berechnet die Qualität der Stichprobe anhand des Diskrepanzkriteriums.
>>> qmc.discrepancy(sample) 0.088893711419753
Wenn jemand ein bestehendes Design fortsetzen möchte, können zusätzliche Punkte durch erneutes Aufrufen von
randomerhalten werden. Alternativ können Sie einige Punkte überspringen, wie z. B.>>> _ = sampler.fast_forward(5) >>> sample_continued = sampler.random(n=5) >>> sample_continued array([[0.3125 , 0.37037037], [0.8125 , 0.7037037 ], [0.1875 , 0.14814815], [0.6875 , 0.48148148], [0.4375 , 0.81481481]])
Schließlich können Stichproben auf Grenzen skaliert werden.
>>> l_bounds = [0, 2] >>> u_bounds = [10, 5] >>> qmc.scale(sample_continued, l_bounds, u_bounds) array([[3.125 , 3.11111111], [8.125 , 4.11111111], [1.875 , 2.44444444], [6.875 , 3.44444444], [4.375 , 4.44444444]])