Warum ist random () * random () anders als random () ** 2?

7

Gibt es Unterschiede zwischen random() * random() und random() ** 2 ? random() gibt einen Wert zwischen 0 und 1 aus einer gleichmäßigen Verteilung zurück.

Beim Testen beider Versionen von zufälligen Quadratzahlen bemerkte ich einen kleinen Unterschied. Ich erstellte 100000 zufällige Quadratzahlen und zählte, wie viele Zahlen in jedem Intervall von 0,01 sind (0,00 bis 0,01, 0,01 bis 0,02, ...). Es scheint, dass diese Versionen der quadrierten Zufallszahlengenerierung unterschiedlich sind.

Wenn Sie eine Zufallszahl quadrieren, anstatt zwei Zufallszahlen zu multiplizieren, verwenden Sie eine Zufallszahl, aber ich denke, die Verteilung sollte gleich bleiben. Gibt es wirklich einen Unterschied? Wenn nicht, warum zeigt mein Test einen Unterschied?

Ich erzeuge zwei zufällige verteilte Verteilungen für random() * random() und eine für random() ** 2 wie folgt:

%Vor%

was

ergibt %Vor%

Der erwartete zufällige Fehler ist der Unterschied in den ersten beiden:

%Vor%

Aber der Unterschied zwischen dem ersten und dritten ist viel größer, was andeutet, dass die Verteilungen verschieden sind:

%Vor%     
Sirac 29.06.2014, 19:09
quelle

2 Antworten

17

Hier sind einige Diagramme:

Alle Möglichkeiten für random() * random() :

Die x-Achse ist eine Zufallsvariable, die nach rechts ansteigt, und die y-Achse ist eine andere, die nach oben ansteigt.

Sie können sehen, dass bei niedrigen Werten das Ergebnis niedrig ist und beide hoch sein müssen, um ein hohes Ergebnis zu erhalten.

Wenn der einzige Entscheider eine einzelne Achse ist, wie im Fall random() ** 2 , erhalten Sie

In diesem Fall ist es viel wahrscheinlicher, einen sehr dunklen (großen) Wert zu erhalten, da das gesamte obere Bild dunkel ist, nicht nur eine Ecke.

Wenn Sie beides linearisieren, mit random() * random() oben:

Sie sehen, dass die Verteilungen tatsächlich verschieden sind.

Code:

%Vor%

Sie können das auch mathematisch angehen. Die Wahrscheinlichkeit, einen Wert kleiner als x zu bekommen, mit 0 ≤ x ≤ 1 ist

Für random()² :

%Vor%

als die Wahrscheinlichkeit, dass der Zufallswert niedriger als x ist, ist die Wahrscheinlichkeit, dass random()² < x .

Für random() · random() :

Wenn die erste Zufallsvariable r und die zweite R ist, können wir die Wahrscheinlichkeit dafür finden, dass Rr < x mit einer festen R :

übereinstimmt %Vor%

Also wollen wir

%Vor%

Wie wir sehen können, √x ≠ x(1 - ln R) .

Diese Verteilungen erscheinen als:

Die y-Achse gibt die Wahrscheinlichkeit an, dass die Linie ( random()² oder random() · random() ) kleiner als die x-Achse ist.

Wir sehen, dass für die random() · random() die Wahrscheinlichkeit großer Zahlen wesentlich geringer ist.

Dichtefunktionen

Ich denke, die aufschlussreichste Sache ist die Unterscheidung ( ½x ^ -½ und - ln x ) und die Wahrscheinlichkeitsdichtefunktionen:

Dies zeigt die Wahrscheinlichkeit jedes x relativ. Daher ist die Wahrscheinlichkeit, dass x groß ist ( > 0.5 ) ungefähr zweimal für die random()² Variante.

    
Veedrac 29.06.2014, 21:09
quelle
13

Lassen Sie uns das Problem etwas vereinfachen. Ziehen Sie in Betracht, zwei Würfel zu werfen und das Ergebnis zu multiplizieren, indem Sie einen Würfel werfen und ihn quadrieren. Im ersten Fall haben Sie eine Chance von 1 zu 36, eine doppelte 1 zu werfen, also eine Chance von 1 zu 36, dass das Produkt 1 ist. Auf der anderen Seite hat der zweite Fall offensichtlich eine Chance von 1 zu 6, dass das Quadrat 1 ist gilt für eine doppelte 6, so dass die Extreme bei der Quadrierung viel wahrscheinlicher sind.

Das gleiche gilt, wenn Sie zufällige Gleitkommazahlen verwenden: Es ist viel weniger wahrscheinlich, dass Sie zwei zufällige Werte an den Extremen erhalten, als einen einzelnen Wert, so dass sehr kleine oder sehr große Werte dann viel häufiger beim Quadrieren auftreten wenn zwei unabhängige Werte multipliziert werden.

    
Duncan 29.06.2014 19:49
quelle

Tags und Links