2016-11-08 3 views
2

Ich versuche wirklich sehr, eine gaußsche Mischung mit sklearn zu machen, aber ich denke, dass ich etwas vermisse, weil es definitiv nicht funktioniert.Parameter initialisieren Gaußsche Mischung in Python mit sklearn

Meine ursprüngliche Daten wie folgt aussehen:

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

ich ein Gaussian Mixture mit 3 Komponenten = 3 Genotypen tun wollen (AA | AB | BB). Ich kenne das Gewicht jedes Genotyps, den Mittelwert des Log-Verhältnisses für jeden Genotyp und den Mittelwert der Stärke für jeden Genotyp.

wgts = [0.8,0.19,0.01] # weight of AA,AB,BB 
means = [[-0.5,9],[0.5,9],[1.5,9]] # mean(LogRatio), mean(Strenght) for AA,AB,BB 

Ich halte Spalten LogRatio und Stärke und erstellen ein NumPy-Array.

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

Dann testete ich die Funktion GaussianMixture aus Mischung aus sklearn V0.18 und versuchte, auch die Funktion GaussianMixtureModel von sklearn v0.17 (ich immer noch nicht den Unterschied sehen und nicht wissen, welche zu benutzen) .

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() 

Dies ist, was ich bekommen, und das ist ein gutes Ergebnis, aber es ändert sich jedes Mal, weil Anfangsparameter unterschiedlich jeder

laufen berechnet

Results of clusterization

Ich möchte meine Parameter in der gaussianMixture initialisieren oder GMM-Funktion, aber ich verstehe nicht, wie ich meine Daten formatieren muss: (

+0

Sie möchten jedes Mal die gleichen Ergebnisse haben? Ist das deine Frage? – MMF

+0

Ja Ich möchte jedes Mal die gleichen Ergebnisse und ich glaube, dass, wenn ich die Anfangsparameter fixieren kann, es der Fall sein wird. – Elysire

+0

Ok, sieh dir meine Antwort dann an;) – MMF

Antwort

0

Es ist möglich, die Zufälligkeit für die Reproduzierbarkeit der Ergebnisse zu steuern, indem Sie dieexplizit impfenPseudozufallszahlengenerator.

Statt:

gmm = mixture.GaussianMixture(n_components=3) 

Do:

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

random_state muss ein int sein: Ich zufällig es 3 gesetzt haben, aber Sie können eine beliebige andere ganze Zahl wählen.

Wenn Sie mehrere Male mit demselben random_state laufen, erhalten Sie die gleichen Ergebnisse.

+0

Ja, du hast recht Ich habe die gleichen Ergebnisse mit random_state, aber ich möchte immer noch meine anfänglichen Parameter mit "height_init" und "means_init" korrigieren und ich kann meine Liste der Gewichte nicht verwenden 0,8,0,19,0,01] direkt selbst in Array-Form. Ich weiß nicht, wie ich meine Gewichte und Mittel formen soll. – Elysire

+0

Ich verstehe nicht, warum Sie Ihre Listen der 'Gewichte' und' Mittel' nicht setzen können. Laut der Dokumentation sollte es funktionieren, wenn es so übergeben wird. Was ist der Fehler? – MMF

+0

Der Fehler ist "ValueError: Der Parameter 'Gewichtungen' sollte normalisiert werden, aber bekam Summe (Gewichte) = 0.98377" – Elysire