Estimation de modèle et vraisemblance

Introduction aux modèles linéaires en Python

Jason Vestuto

Data Scientist

Estimation

Diagramme : histogramme (comptes normalisés selon des intervalles de distance) en barres grises et courbe gaussienne rouge épousant le sommet des barres grises

Introduction aux modèles linéaires en Python

Estimation

# Define gaussian model function
def gaussian_model(x, mu, sigma):
    coeff_part = 1/(np.sqrt(2 * np.pi * sigma**2))
    exp_part = np.exp( - (x - mu)**2 / (2 * sigma**2) )
    return coeff_part*exp_part
# Compute sample statistics
mean = np.mean(sample)
stdev = np.std(sample)
# Model the population using sample statistics
population_model = gaussian(sample, mu=mean, sigma=stdev)
Introduction aux modèles linéaires en Python

Vraisemblance vs probabilité

  • Probabilité conditionnelle : $P( \text{issue A} | \text{étant donné B})$
  • Probabilité : $P( \text{données} | \text{modèle} )$
  • Vraisemblance : $L( \text{modèle} | \text{données} )$
Introduction aux modèles linéaires en Python

Calcul de la vraisemblance

Courbe de probabilité selon la distance : cloche gaussienne rouge, avec un point près du bord gauche et des segments reliant ce point aux axes

Introduction aux modèles linéaires en Python

Calcul de la vraisemblance

Courbe de probabilité selon la distance : cloche gaussienne rouge, avec 6 points du bord gauche vers le centre, et des segments reliant chaque point aux deux axes

Introduction aux modèles linéaires en Python

Vraisemblance à partir des probabilités

# Guess parameters
mu_guess = np.mean(sample_distances)
sigma_guess = np.std(sample_distances)
# For each sample point, compute a probability
probabilities = np.zeros(len(sample_distances))
for n, distance in enumerate(sample_distances):
    probabilities[n] = gaussian_model(distance, mu=mu_guess, sigma=sigma_guess)
likelihood = np.product(probs)
loglikelihood = np.sum(np.log(probs))
Introduction aux modèles linéaires en Python

Estimation du maximum de vraisemblance

# Create an array of mu guesses
low_guess = sample_mean - 2*sample_stdev
high_guess = sample_mean + 2*sample_stdev
mu_guesses = np.linspace(low_guess, high_guess, 101)
# Compute the loglikelihood for each guess
loglikelihoods = np.zeros(len(mu_guesses))
for n, mu_guess in enumerate(mu_guesses):
    loglikelihoods[n] = compute_loglikelihood(sample_distances, mu=mu_guess, sigma=sample_stdev)
# Find the best guess
max_loglikelihood = np.max(loglikelihoods)
best_mu = mu_guesses[loglikelihoods == max_loglikelihood]
Introduction aux modèles linéaires en Python

Estimation du maximum de vraisemblance

Parabole tournée vers le bas, avec un point rouge au maximum, axes : log-vraisemblance selon les valeurs de mu

Introduction aux modèles linéaires en Python

Passons à la pratique !

Introduction aux modèles linéaires en Python

Preparing Video For Download...