[PYTHON] Über die Angelegenheit, die über Stichprobenfehler besorgt war

Dieser Artikel ist der 21. Tag von Furukawa Lab Advent_calendar. Dieser Artikel wurde von einem Studenten des Furukawa Lab als Teil seines Lernens geschrieben. Der Inhalt kann mehrdeutig sein oder der Ausdruck kann leicht abweichen.

Einführung

Ich bin überhaupt nicht mit Statistiken vertraut, aber als ich gerne auf Twitter surfte, sah ich einen Tweet mit einem Ranking-Bild wie "Das zukünftige Traum-Ranking, das ich 200 Junior High School-Schülern gefragt habe! (Vielleicht war es nicht so!)" Ist es etwas, das die Leute verstehen können? Ich hatte eine Frage. Hat jemand das Gleiche gedacht? In der Antwort gab es einen Kommentar mit der Aufschrift "Ist es nicht eine Umfrage unter 200 Personen?", Aber in der Antwort darauf: "Das Konfidenzintervall beträgt 95% und der Stichprobenfehler liegt innerhalb von 10%. Es ist geworden. " Ich habe es gehört und erinnere mich, dass ich es in einer Universitätsklasse gemacht habe, aber leider konnte ich mich nicht erinnern, also habe ich beschlossen, Google Teacher zu fragen ...

Beispielfehler

Der Stichprobenfehler ist der Fehler, der mit der Schätzung des numerischen Werts in der Grundgesamtheit aus der Stichprobe einhergeht. Hmmmm ... ich habe das Gefühl, ich habe es gelernt. Im Test fiel mir ein, dass es ein Problem mit dem Vertrauensbereich gab. Diese Site ist leicht zu verstehen, und wenn Sie tatsächlich mit dem vorherigen Beispiel rechnen ...

\begin{align}
\bar{p}=0.5\\
n=200\\
1.96\sqrt{\cfrac{\bar{p}(1-\bar{p})}{n}}&=1.96\sqrt{\cfrac{0.5(1-0.5)}{200}}\\
&=0.0692924...
\end{align}

Es scheint, dass der Stichprobenfehler 7% beträgt. (Übrigens lügen 100 Proben zu etwa 10%) Ich dachte, es wäre besser, sich der Idee eines Stichprobenfehlers bewusst zu sein.

Zusätzliches Spiel von hier (kurzer Text w)

Ich habe gehört, dass eine völlig zufällig ausgewählte Stichprobe in Ordnung wäre ... Bereiten Sie die Daten der Sattelform als Grundgesamtheit vor und erstellen Sie dann eine Zufallsstichprobe. Wie viel sollten Sie vorbereiten, um die ursprüngliche Sattelform zu schätzen?

image.png

import numpy as np

    map_size = 60
    def create_data(nb_samples, input_dim=3, retdim=False):
        latent_dim = 2
        z1 = np.random.rand(nb_samples) * map_size - map_size/2
        z2 = np.random.rand(nb_samples) * map_size - map_size/2

        x = np.zeros((nb_samples, input_dim))
        x[:, 0] = z1
        x[:, 1] = z2
        x[:, 2] = z1 ** 2 - z2 ** 2

        if retdim:
            return x, latent_dim
        else:
            return x

    # parameters to make data
    x_sigma = 0.1
    nb_samples = 900
    seed = 1

    # make data
    np.random.seed(seed)
    X = create_data(nb_samples)
    X += np.random.normal(0, x_sigma, X.shape)

Erstellen Sie eine Sattelform wie diese! Beginnen Sie mit 900 Stichproben und versuchen Sie, 30 * 30 Knotenpunkte mithilfe der Gaußschen Prozessregression zu schätzen Schätzen Sie die Z-Achse aus den X- und Y-Achsenkoordinaten! Ich habe den Durchschnitt mit blauen Punkten dargestellt, da es schwierig wäre, mit verteilter Verteilung zu zeichnen!

from matplotlib import pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process import kernels as sk_kern
    x_input = X[:,:2]
    y_input = X[:,2]
    kernel = sk_kern.RBF(1.0, (1e-3, 1e3))  # + sk_kern.ConstantKernel(1.0,(1e-3,1e3)) + sk_kern.WhiteKernel()
    clf = GaussianProcessRegressor(
        kernel=kernel,
        alpha=1e-10,
        optimizer="fmin_l_bfgs_b",
        n_restarts_optimizer=20,
        normalize_y=True)

    clf.fit(x_input,y_input )
    clf.kernel_

    test_x = np.linspace(-map_size/2,map_size/2,30)
    test = np.meshgrid(test_x,test_x)
    test=np.dstack(test).reshape(900,2)

    pred_mean, pred_std = clf.predict(test, return_std=True)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, aspect='equal', projection='3d')
    ax.scatter(X[:,0],X[:,1],X[:,2],color='r')
    ax.scatter(test[:,0],test[:,1],pred_mean)
    plt.show()

image.png

Wenn Sie 900 Punkte haben, können Sie dies tun, aber wenn Sie mit der obigen Formel rechnen, scheint der Fehler etwa 3% zu betragen. Von nun an von der mit der geringsten Anzahl von Proben Erste 50! image.png Hmmmm ... Der Stichprobenfehler in der vorherigen Formel beträgt übrigens etwa 14%. Als nächstes ist 100! image.png Es ist wie ein Sattel geformt! !! Wie erwartet 10% Versuchen wir es mit 200 image.png Ist es ein wenig aus dem Schritt? Es sieht so aus, als würde es passieren, aber ich kann es genug fahren! Der Fehler beträgt 7% Wird es das letzte bei 400 sein? image.png Eh, ist das nicht schlechter als 900?

Zusammenfassung

Ich fand die Idee des Stichprobenfehlers interessant! (Ich habe Angst, dass ich mich über solch ein statistisches Tag ärgern könnte) Es ist ein wenig beschäftigt und das zusätzliche Kapitel hat überhaupt keinen strengen experimentellen Plan, daher ist es entzückend, dass es keinen Sinn macht, nur eine Figur wie diese m (_ _) m aufzustellen

Recommended Posts

Über die Angelegenheit, die über Stichprobenfehler besorgt war
Wo ich mir Sorgen um Heroku machte
Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann
Die Geschichte, dass XGBoost endlich installiert wurde
Über die Sache, dass Softmax am Ende von Torchvisions Modell nicht benötigt wird.
Über den Punkt, an dem Python 3.x aufgrund eines Fehlers aufgrund von caching_sha2_password hängen blieb
Über localhost: Auf 4040 kann nicht zugegriffen werden, nachdem Spark mit Docker ausgeführt wurde
Kann aspect_ratio mit sympy.plotting nicht geändert werden? Über die Sache
Zu dem Problem, dass der Inhalt von Python print in Docker-Protokollen nicht sichtbar ist
Über den Test
Über die Warteschlange
Ein Problem mit scikit-learn, das den Fehler erhält Kein Modul mit dem Namen'_bz2 '
Über den Prozess, den der Linux-Kernel mit x86-Mikrocode verarbeitet
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
Die Geschichte, die Japan ausgab, wurde mit Django verwechselt
Die Geschichte von PHP, die in der Entwicklungsumgebung in Ordnung war, in der Produktionsumgebung jedoch fehlerhaft LEVEL1 ~ 3 + 1
Über die Angelegenheit, dass Nosetests nicht bestanden werden, wenn __init__.py im Projektverzeichnis erstellt wird