[PYTHON] Reproduire des exemples numériques de pseudo-corrélation (série professionnelle d'apprentissage automatique)

Je ferai la partie qui reproduit l'exemple numérique de pseudo-corrélation qui est sorti en lisant "Statistical Causal Search" dans la série Machine Learning Professional (chapitre 1.3 du livre, autour de la figure 1.4). Un exemple où le modèle de génération de données d'arrière-plan peut ne pas être compris à partir de la corrélation apparente.

--Commun à tous les modèles

# -*- coding: utf-8 -*-
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


def gendata(N=100, verbose=False):
    # Model 1
    z1 = np.random.normal(0.0, 1.0, N)
    ex1 = np.random.normal(0.0, np.sqrt(1-0.3**2), N)
    ey1 = np.random.normal(0.0, np.sqrt(1-0.7**2-0.3**), N)
    x1 = 0.3 * z1 + ex1
    y1 = 0.7 * x1 + 0.3 * z1 + ey1

    if verbose:
        print("model 1")
        print(np.std(x1))
        print(np.std(y1))

    # Model 2
    z2 = np.random.normal(0.0, 1.0, N)
    ex2 = np.random.normal(0.0, np.sqrt(1-0.7**2-0.3**), N)
    ey2 = np.random.normal(0.0, np.sqrt(1-0.3**2), N)
    y2 = 0.3 * z2 + ey2
    x2 = 0.7 * y2 + 0.3 * z2 + ex2

    if verbose:
        print("model 2")
        print(np.std(x2))
        print(np.std(y2))

    # Model 3
    z3 = np.random.normal(0.0, 1.0, N)
    ex3 = np.random.normal(0.0, np.sqrt(1.0-0.89**2), N)
    ey3 = np.random.normal(0.0, np.sqrt(1.0-0.89**2), N)
    x3 = 0.89 * z3 + ex3
    y3 = 0.89 * z3 + ey3

    if verbose:
        print("model 3")
        print(np.std(x3))
        print(np.std(y3))

    return x1, y1, x2, y2, x3, y3

if __name__ == '__main__':
    for n in [10, 100, 1000, 10000]:
        x1, y1, x2, y2, x3, y3 = gendata(n)
        plt.figure(figsize=(12, 4))
        plt.subplot(1, 3, 1)
        plt.xlim(-5, 5)
        plt.ylim(-5, 5)
        plt.plot(x1, y1, "ro")
        plt.subplot(1, 3, 2)
        plt.xlim(-5, 5)
        plt.ylim(-5, 5)
        plt.plot(x2, y2, "ro")
        plt.subplot(1, 3, 3)
        plt.xlim(-5, 5)
        plt.ylim(-5, 5)
        plt.plot(x3, y3, "ro")
        plt.savefig("N{}.png ".format(n))

N10.png

N100.png

N1000.png

N10000.png

Recommended Posts

Reproduire des exemples numériques de pseudo-corrélation (série professionnelle d'apprentissage automatique)
Résumé des diapositives de la session de lecture ronde de la série professionnelle d'apprentissage automatique
Bases de l'apprentissage automatique (mémoire)
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Importance des ensembles de données d'apprentissage automatique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Code source pour la séparation des sources sonores (série de pratiques d'apprentissage automatique) appris avec Python
20 sélections recommandées en 2020 de livres d'introduction à l'apprentissage automatique
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
[Apprentissage automatique] Liste des packages fréquemment utilisés