Generieren Sie eine Array von Zahlen, die zu einer Wahrscheinlichkeitsverteilung in Ruby passen?

StackOverflow https://stackoverflow.com/questions/4550758

  •  13-10-2019
  •  | 
  •  

Frage

Sagen Sie, ich habe 100 Datensätze, und ich möchte das verspotten created_at Datum, so dass es auf eine Kurve passt. Gibt es eine Bibliothek, um das zu tun, oder welche Formel könnte ich verwenden? Ich denke, das ist auf der gleichen Strecke:

Generieren Sie zufällige Zahlen mit probabilistischer Verteilung

Ich weiß nicht viel darüber, wie sie in Mathematik eingestuft werden, aber ich schaue mir Dinge an wie:

  • Glockenkurve
  • logarithmische (typische Biologie/Evolution) Kurve? ...

Suchen Sie nur nach einigen Formeln im Code, damit ich Folgendes sagen kann:

  • Gegeben 100 Datensätze, eine Zeitspanne von 1.week, und ein Intervall von 12.hours
  • einstellen created_at für jede Aufzeichnung so, dass es ungefähr zu passt, zu curve

Vielen Dank!

Aktualisieren

ich fand Dieser Forum -Beitrag über Ruby -Algorithmen, was mich dazu führte Rsruby, eine R/Ruby -Brücke, aber das scheint zu viel zu sein.

Update 2

Ich habe diesen kleinen Ausschnitt geschrieben, der das ausprobierte gsl Bibliothek, dort ankommen ...

Generieren Sie Testdaten in Schienen, bei denen erstelltes_at entlang einer statistischen Verteilung fällt

War es hilfreich?

Lösung

Sie können Unix -Zeitstempel generieren, die wirklich nur Ganzzahlen sind. Finden Sie zuerst heraus, wann Sie jetzt anfangen möchten:

start = DateTime::now().to_time.to_i

Finden Sie heraus, wann das Ende Ihres Intervalls sein sollte (z. B. 1 Woche später):

finish = (DateTime::now()+1.week).to_time.to_i

Ruby verwendet Dieser Algorithmus zufällige Zahlen zu generieren. Es ist fast einheitlich. Generieren Sie dann zufällige Zahlen zwischen den beiden:

r = Random.new.rand(start..finish)

Wenden Sie das dann wieder in ein Datum um:

d = Time.at(r)

Das sieht auch vielversprechend aus:http://rb-gsl.rubyforge.org/files/rdoc/randist_rdoc.html

Und das auch:http://rb-gsl.rubyforge.org/files/rdoc/rng_rdoc.html

Andere Tipps

Ich bin kürzlich auf Croupier, ein Ruby -Juwel, das darauf abzielt, Zahlen gemäß einer Vielzahl statistischer Verteilungen zu generieren.

Ich habe es noch nicht ausprobiert, aber es klingt ziemlich vielversprechend.

Aus Wiki:

Es gibt einige Methoden, um eine Zufallszahl zu generieren, die auf einer Wahrscheinlichkeitsdichtefunktion basiert. Diese Methoden beinhalten die Transformation einer gleichmäßigen Zufallszahl in irgendeiner Weise. Aus diesem Grund eignen sich diese Methoden gleichermaßen gut bei der Generierung von Pseudo-Random- und echten Zufallszahlen.

Eine Methode, genannt die Inversionsmethode, beinhaltet die Integration in einen Bereich, der größer oder gleich der Zufallszahl ist (die zwischen 0 und 1 für ordnungsgemäße Verteilungen erzeugt werden sollte).

Eine zweite Methode, genannt die AkzeptanzverletzungsmethodeBeinhaltet die Auswahl eines X- und Y -Werts und die Prüfung der Funktion, ob die Funktion von x größer als der Y -Wert ist. Wenn ja, wird der X -Wert akzeptiert. Andernfalls wird der X -Wert abgelehnt und der Algorithmus versucht erneut.

Die erste Methode ist die, die in der akzeptierten Antwort in Ihrer so verlinkten Frage verwendet wird: Generieren Sie zufällige Zahlen mit probabilistischer Verteilung

Eine andere Option ist die Verteilung Edelstein unter Sciruby. Sie können Normalzahlen generieren durch:

require 'distribution'

rng = Distribution::Normal.rng
random_numbers = Array.new(100).map { rng.call }

Es gibt auch RNGs für verschiedene andere Verteilungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top