2016-11-08 2 views
2

J'essaie vraiment de faire un Mélange gaussien avec sklearn mais je pense qu'il me manque quelque chose parce que ça ne marche définitivement pas.Initialiser les paramètres Mélange gaussien en Python avec sklearn

Mes données originales ressemblent à ceci:

Genotype LogRatio Strength 
AB  0.392805 10.625016 
AA  1.922468 10.765716 
AB  0.22074 10.405445 
BB  -0.059783 10.625016 

Je veux faire un mélange de gaussiennes avec 3 composantes = 3 génotypes (AA | AB | BB). Je connais le poids de chaque génotype, la moyenne du rapport de log pour chaque génotype et la moyenne de la force pour chaque génotype. Je conserve les colonnes LogRatio et Strength et crée un tableau NumPy.

datas = [[ 0.392805 10.625016] 
     [ 1.922468 10.765716] 
     [ 0.22074 10.405445] 
     [ -0.059783 9.798655]] 

Je testé la fonction GaussianMixture du mélange de sklearn v0.18 et a aussi essayé la fonction GaussianMixtureModel de sklearn v0.17 (je ne vois toujours pas la différence et je ne sais pas lequel utiliser) .

gmm = mixture.GMM(n_components=3) 
OR 
gmm = mixture.GaussianMixture(n_components=3) 

gmm.fit(datas) 

colors = ['r' if i==0 else 'b' if i==1 else 'g' for i in gmm.predict(datas)] 
ax = plt.gca() 
ax.scatter(datas[:,0], datas[:,1], c=colors, alpha=0.8) 
plt.show() 

C'est ce que j'obtenir ce qui est un bon résultat, mais il change à chaque fois que les paramètres initiaux sont calculés différemment chaque essai

Results of clusterization

Je voudrais initialiser mes paramètres dans le gaussianMixture ou la fonction GMM mais je ne comprends pas comment je dois formater mes données: (

+0

Vous souhaitez obtenir les mêmes résultats chaque fois? Est-ce votre question? – MMF

+0

Oui, je veux les mêmes résultats à chaque fois et je crois que si je peux fixer les paramètres initiaux, ce sera le cas. – Elysire

+0

Ok, regarde ma réponse alors;) – MMF

Répondre

0

Il est possible de contrôler le caractère aléatoire pour la reproductibilité des résultats en insérant explicitement le random_state générateur de nombres pseudo aléatoires.

Au lieu de:

gmm = mixture.GaussianMixture(n_components=3) 

Do:

gmm = mixture.GaussianMixture(n_components=3, random_state=3) 

random_state doit être un int: Je l'ai mis au hasard à 3 mais vous pouvez choisir un autre entier.

Lors de l'exécution de plusieurs fois avec le même random_state, vous obtiendrez les mêmes résultats.

+0

Oui vous avez raison j'ai les mêmes résultats avec random_state mais je veux toujours fixer mes paramètres initiaux avec "weights_init" et "means_init" et je ne peux pas utiliser ma liste de poids [ 0,8,0.19,0.01] directement même en forme de réseau. Je ne sais pas comment former mes poids et mes moyens. – Elysire

+0

Je ne comprends pas pourquoi vous ne pouvez pas mettre vos listes de «poids» et «means». Selon la documentation Cela devrait fonctionner s'il est passé comme ça. Quelle est l'erreur jeté? – MMF

+0

L'erreur est "ValueError: le paramètre 'poids' doit être normalisé, mais somme (poids) = 0.98377" – Elysire