En parlant d'analyse de données, c'est la construction d'un modèle statistique qui peut expliquer les relations cachées dans les données observées. La compréhension de la distribution de probabilité est essentielle pour construire des modèles statistiques. Dans l'idée d'analyse des données, les données d'une variable proviennent d'un phénomène probabiliste. Inversement, quel type de distribution de probabilité peut être utilisé pour représenter le modèle de données observé? </ b>
Une façon de faire est d'appliquer une distribution de probabilité. Cependant, la forme de la distribution de probabilité change en fonction des paramètres, il est donc nécessaire de déterminer les valeurs de paramètre appropriées en fonction des données observées pour l'ajustement. La méthode d'estimation la plus probable est une méthode majeure de calcul de la valeur du paramètre.
Décrivant grossièrement la méthode de la méthode d'estimation la plus probable, en supposant que les données obtenues sont N données Y extraites d'une distribution de probabilité avec un certain paramètre θ, la probabilité d'extraction de chaque valeur est $ p (y_i | θ). ) Soit la fonction de vraisemblance L le produit de $ par N pièces.
Il existe deux types de distribution de probabilité, de type discret et de type continu, selon les données. Cette fois-ci, à titre d'exemple de distribution de probabilité de type discret, nous effectuons l'estimation la plus probable de la distribution de Poisson et l'ajustement de la distribution de probabilité.
La distribution de Poisson est principalement utilisée pour les données de dénombrement. La fonction de probabilité qui représente la distribution est la suivante.
Les données de test pour estimer et ajuster le modèle sont créées à l'avance à partir de la distribution de probabilité cible afin que les réponses puissent être appariées.
Python
"""Nombres aléatoires de la distribution de Poisson"""
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(seed=10)
#Paramètre λ=2.4
poisson_values = np.random.poisson(lam=2.4, size=1000)
p_y, bin_edges, patches = plt.hist(poisson_values , bins=11, range=[-0.5, 10.5], normed=True)
y_k = 0.5*(bin_edges[1:] + bin_edges[:-1])
y_k #y
p_y #p(y)
Vous pouvez voir les valeurs et les nombres des 1000 pseudo données obtenues. Maintenant, appliquons la distribution de Poisson à de telles données et estimons ses paramètres les plus probables.
Python
"""Estimation des paramètres par différenciation partielle de la fonction de vraisemblance logarithmique"""
import sympy #Bibliothèque de calculs algébriques (résolution de différenciation et d'équations)
#Définir des variables
sympy.var('λ y ')
#Responsabilité p(Paramètres|y)Définir
f = (λ**y)*sympy.exp(-λ)/sympy.factorial(y)
#Logistique
logf=sympy.log(f)
#Différencier partiellement f et développer l'équation
pdff = sympy.expand(sympy.diff(logf, λ))
La formule pdff, qui est la différenciation partielle de la vraisemblance logarithmique par rapport au paramètre λ, est $ \ frac {y_i} {λ} -1 $. Puisque cela peut être calculé comme λ, qui est $ \ sum_ {i = 1} ^ {1000} (\ frac {y_i} {λ} -1) = 0 $, qui est la somme des données.
Python
def L_sympy(f,var,values):
likelihood = 0 #Valeur initiale de la vraisemblance
for i in np.arange(len(values)): #Pour le nombre de données
# model output
# print(values[i])
likelihood += f.subs(var,values[i]) #Remplacez y par une valeur
# print(likelihood)
param = sympy.solve(likelihood, λ) #Résous l'équation pour λ
# print(param)
return param
L_sympy(pdff,"y",poisson_values)
Estimation des paramètres:[289/125]=2.312
Le paramètre λ a été estimé à 2,312. Le réglage de λ de ces pseudo-données est 2,4, vous pouvez donc bien l'estimer.
Comme pour la méthode du manuel, vous pouvez obtenir directement la formule qui permet de calculer les paramètres en résolvant la formule partiellement différenciée (dérivée) comme décrit ci-dessus. Cependant, dans la modélisation statistique générale, il y a plusieurs paramètres à estimer, et la formule de la distribution de probabilité est plus compliquée, elle n'est donc pas facile à résoudre.
Dans le modèle linéaire généralisé (GLM) couramment utilisé, le modèle statistique qui décrit les données est représenté par la forme de distribution de probabilité et de prédiction linéaire (et fonction de lien).
L'exemple donné ci-dessus ne traite que Y comme Y ... On peut dire que c'est un modèle statistique.
En passant, ce n'est pas facile à résoudre car il y a plusieurs paramètres à estimer comme un modèle statistique général et la formule est compliquée (pas une formule linéaire comme ce qu'on appelle $ \ frac {y} {λ} -1 $, mais $ λ Non-linéaire comme ^ 2 + θ ^ 3 + ... $). Par conséquent, nous utilisons la méthode de résolution d'équations non linéaires.
Python
"""Fonction de distribution de probabilité discrète (fonction de masse de probabilité)"""
def probability_poisson(y,λ):
from scipy.special import factorial
# λ:Paramètres
# y:Données y: se produit y fois
# return:Données Y probabilité P(y|Paramètres)
return (λ**y)*np.exp(-λ)/factorial(y)
"""Fonction de vraisemblance de type journal: type discret"""
def L_func(param,y):
likelihood = 0 #Valeur initiale de la vraisemblance
for i in np.arange(len(y)):
# model output
p = probability_poisson(y[i], param)
# likelihood
likelihood += -np.log(p) #Responsabilité
return likelihood
"""Estimation des paramètres"""
"""
Méthode Semi-Newton (BFGS, L)-Méthode BFGS: la mémoire peut être sauvegardée dans les cas compliqués)
"""
from scipy import optimize
x0 = [2] #Valeurs initiales des paramètres
bound = [(0, None)] #Portée de la recherche de paramètres optimale(min,max)
params_MLE = optimize.minimize(L_func,x0,args=(poisson_values),method='l-bfgs-b',
jac=None, bounds=bound, tol=None, callback=None,
options={'disp': None, 'maxls': 20, 'iprint': -1,
'gtol': 1e-05, 'eps': 1e-08, 'maxiter': 15000,
'ftol': 2.220446049250313e-09, 'maxcor': 10,
'maxfun': 15000})
#Estimation la plus probable du paramètre
print('Paramètres:',params_MLE.x)
#Nombre de paramètres
k=1
#AIC (le modèle avec la plus petite valeur est un bon ajustement)
print('AIC:',params_MLE.fun*(2)+2*k)
Paramètres:[2.31200054]
AIC: [3607.0081302]
De même, le paramètre λ a été estimé à 2,312.
Python
"""curve_Il existe également un calcul de paramètres avec ajustement pour le moment"""
from scipy.optimize import curve_fit
parameters, cov_matrix = curve_fit(f=probability_poisson, xdata=y_k, ydata=p_y)
print("Paramètres:",parameters, "Co-distribué:",cov_matrix)
Paramètres: [2.31643586]Co-distribué: [[0.00043928]]
Appliquons le modèle (distribution de Poisson) aux données avec le paramètre estimé λ = 2,312.
Python
"""Illustration de son application"""
acc_mle = probability_poisson(y_k, params_MLE.x)
plt.hist(poisson_values , bins=11, range=[-0.5, 10.5], normed=True)
plt.plot(y_k,acc_mle)
Ça fait du bien.
Recommended Posts