Modelschatting en likelihood

Introductie tot lineaire modellering in Python

Jason Vestuto

Data Scientist

Schatting

Plot van histogram: genormaliseerde tellingen per afstandsbin, met data als grijze balken en model als rode gaussische bel die strak over de toppen past

Introductie tot lineaire modellering in Python

Schatting

# 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)
Introductie tot lineaire modellering in Python

Likelihood vs kans

  • Voorwaardelijke kans: $P( \text{uitkomst A} | \text{gegeven B})$
  • Kans: $P( \text{data} | \text{model} )$
  • Likelihood: $L( \text{model} | \text{data} )$
Introductie tot lineaire modellering in Python

Likelihood berekenen

Plot van kans versus afstand, als een rode gaussische belcurve, met een punt near de linkerrand en horizontale en verticale lijntjes naar de assen

Introductie tot lineaire modellering in Python

Likelihood berekenen

Plot van kans versus afstand, als een rode gaussische belcurve, met 6 punten van de linkerrand naar het midden, met horizontale en verticale lijntjes naar beide assen

Introductie tot lineaire modellering in Python

Likelihood uit kansen

# 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))
Introductie tot lineaire modellering in Python

Maximum likelihood-schatting

# 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]
Introductie tot lineaire modellering in Python

Maximum likelihood-schatting

Plot van een neerwaartse parabool, met rood punt bij het maximum, met assen loglikelihood versus waarden van mu

Introductie tot lineaire modellering in Python

Laten we oefenen!

Introductie tot lineaire modellering in Python

Preparing Video For Download...