L'utilisation du BIC/AIC est une alternative à l'utilisation de la validation croisée. GridSearchCV
sélectionne les modèles utilisant la validation croisée. Pour effectuer une sélection de modèle en utilisant le BIC/AIC, nous devons faire quelque chose d'un peu différent. Prenons un exemple où nous générons des échantillons à partir de deux gaussiennes, puis essayons de les adapter en utilisant scikit-learn.
import numpy as np
X1 = np.random.multivariate_normal([0.,0.],[[1.,0.],[0.,1.]],10000)
X2 = np.random.multivariate_normal([10.,10.],[[1.,0.],[0.,1.]],10000)
X = np.vstack((X1,X2))
np.random.shuffle(X)
Méthode 1: Validation croisée
Cross validation consiste à diviser les données en morceaux. On adapte ensuite le modèle sur certaines pièces («formation») et teste comment il fonctionne sur les pièces restantes («validation»). Cela protège contre le sur-ajustement. Ici, nous allons utiliser la validation croisée double, où nous divisons les données en deux.
from sklearn.mixture import GaussianMixture
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
#check 1->4 components
tuned_parameters = {'n_components': np.array([1,2,3,4])}
#construct grid search object that uses 2 fold cross validation
clf = GridSearchCV(GaussianMixture(),tuned_parameters,cv=2)
#fit the data
clf.fit(X)
#plot the number of Gaussians against their rank
plt.scatter(clf.cv_results_['param_n_components'],\
clf.cv_results_['rank_test_score'])
Nous pouvons voir que la validation croisée 2-octets favorise deux composants gaussiens, comme nous le prévoyons.
Méthode 2: BIC/AIC
Au lieu d'utiliser la validation croisée, nous pouvons évaluer le BIC en utilisant le modèle le mieux adapté compte tenu de chaque numéro de gaussiennes. Nous choisissons ensuite le modèle qui a le plus petit BIC. La procédure serait identique si l'on utilisait l'AIC (bien que ce soit une statistique différente, et puisse fournir des réponses différentes: mais votre structure de code serait identique à ci-dessous). Après avoir effectué cette procédure, nous pouvons tracer le nombre de gaussiennes par rapport au BIC.
plt.plot(n,bic)
Ainsi, nous pouvons voir que le BIC est réduit au minimum pour deux gaussiennes, de sorte que le meilleur modèle selon cette méthode a également deux composants. Parce que j'ai pris 10000 échantillons de deux gaussiennes très bien séparées (c'est-à-dire que la distance entre leurs centres est beaucoup plus grande que l'une ou l'autre de leurs dispersions), la réponse était très nette. Ce n'est pas toujours le cas, et souvent aucune de ces méthodes ne vous dira avec certitude quel nombre de gaussiennes utiliser, mais plutôt une certaine fourchette raisonnable.
Puis-je vous demander pourquoi vous utilisez le BIC ou l'AIC? Je recommanderais d'utiliser la validation croisée à la place. Aussi, je suppose que vous utilisez GridSearchCV pour décider du nombre de gaussiennes à utiliser? –
Oui, j'utilise aussi GridSearchCV pour le nombre de gaussiennes. Je suis au vrai début de mon analyse et j'essaie beaucoup de choses, et j'ai découvert que BIC et AIC sont deux moyens possibles. J'utilise GaussianMixture pour la détection d'anomalies, je ne sais pas si cela aide. – lapally
Je vais poster une réponse qui explique comment utiliser GridSearchCV, et comment utiliser le BIC ou l'AIC. –