[PYTHON] À propos de la question qui s'inquiétait de l'erreur d'échantillonnage

Cet article est l'article du 21ème jour du Furukawa Laboratory Advent_calendar. Cet article a été rédigé par un étudiant du Furukawa Lab dans le cadre de leur apprentissage. Le contenu peut être ambigu ou l'expression peut être légèrement différente.

introduction

Je ne connais pas du tout les statistiques, mais quand j'aimais surfer sur Twitter, j'ai vu un tweet avec une image de classement comme "Le futur classement des rêves que j'ai demandé à 200 élèves du premier cycle du secondaire! (Peut-être que ce n'était pas comme ça!)" Est-ce quelque chose que les gens peuvent comprendre? J'avais une question. Quelqu'un a-t-il pensé la même chose? Dans la réponse, il y avait un commentaire disant "N'est-ce pas une enquête auprès de 200 personnes?", Mais dans la réponse, "L'intervalle de confiance est de 95% et l'erreur d'échantillonnage est de 10%. Il est devenu. " Je l'ai entendu et je me souviens de l'avoir fait dans un cours universitaire, mais malheureusement je ne m'en souvenais pas, alors j'ai décidé de demander à Google Teacher ...

Erreur d'échantillon

L'erreur d'échantillon est l'erreur qui accompagne l'estimation de la valeur numérique dans la population de l'échantillon. Hmmmm ... j'ai l'impression de l'avoir appris. Lors du test, je me suis souvenu qu'il y avait un problème avec la section de confiance. Ce site est facile à comprendre, et lorsque vous calculez réellement avec l'exemple précédent ...

\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}

Il semble que l'erreur d'échantillonnage soit de 7%. (À propos, 100 échantillons ont fait environ 10%, mensonge) J'ai pensé qu'il valait mieux être conscient de l'idée d'erreur d'échantillonnage.

Jeu supplémentaire à partir d'ici (texte court w)

J'ai entendu dire qu'un échantillon complètement sélectionné au hasard conviendrait ... Préparez les données de la forme de la selle en tant que population, puis préparez un échantillon aléatoire. Combien devez-vous préparer pour estimer la forme originale de la selle?

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)

Créez une forme de selle comme celle-ci! Commencez avec 900 échantillons et essayez d'estimer 30 * 30 points de nœuds en utilisant la régression de processus gaussien Estimez l'axe Z à partir des coordonnées des axes X et Y! J'ai tracé la moyenne avec des points bleus car il serait difficile de tracer avec une distribution distribuée!

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

Eh bien, vous pouvez le faire si vous n'avez que 900 points, il semble que l'erreur soit d'environ 3% si vous calculez avec la formule ci-dessus. Désormais, de celui avec le plus petit nombre d'échantillons 50 premiers! image.png Hmmmm ... À propos, l'erreur d'échantillonnage dans la formule précédente est d'environ 14%. Le suivant est 100! image.png Il a la forme d'une selle! !! Comme prévu 10% Essayons 200 image.png Est-ce un peu hors de l'entrejambe? On dirait que ça va arriver, mais je peux le conduire assez! L'erreur est de 7% Sera-ce le dernier à 400 image.png Eh, n'est-ce pas inférieur à 900?

Résumé

J'ai trouvé l'idée d'erreur d'échantillonnage intéressante! (J'ai peur de me mettre en colère contre une telle balise statistique) C'est un peu chargé et le chapitre supplémentaire n'a pas du tout de plan expérimental strict, donc c'est adorable que cela n'a aucun sens de mettre en place un chiffre comme celui-là m (_ _) m

Recommended Posts

À propos de la question qui s'inquiétait de l'erreur d'échantillonnage
Où j'étais inquiet pour heroku
À propos du fait que l'objet recompilé peut être utilisé pour le modèle re.match
L'histoire que XGBoost a finalement été installé
À propos du fait que softmax n'est pas nécessaire à la fin du modèle de Torchvision.
À propos du point où python 3.x est resté bloqué en raison d'une erreur due à caching_sha2_password
À propos de localhost: 4040 n'est pas accessible après l'exécution de Spark avec Docker
Vous ne pouvez pas changer aspect_ratio avec sympy.plotting? À propos de l'affaire
À propos du fait que le contenu de l'impression Python n'est pas visible dans les journaux du docker
À propos du test
À propos de la file d'attente
Un problème avec scikit-learn obtenant l'erreur Aucun module nommé'_bz2 '
À propos du processus que le noyau Linux gère le microcode x86
L'histoire selon laquelle la valeur de retour de tape.gradient () était None
L'histoire de la confusion entre la production japonaise et Django
L'histoire de PHP qui était correcte dans l'environnement de développement mais boguée dans l'environnement de production LEVEL1 ~ 3 + 1
À propos du problème que nosetests ne passe pas lorsque __init__.py est créé dans le répertoire du projet