Non una grande differenza con la versione 0.14.1 di sklearn. Userò seguente codice per il modello DPGMM stampa:
def pprint(model, data):
idx = np.unique(model.predict(data))
m_w_cov = [model.means_, model.weights_, model._get_covars()]
flattened = map(lambda x: np.array(x).flatten(), m_w_cov)
filtered = map(lambda x: x[idx], flattened)
print np.array(filtered)
Questa funzione filtra i componenti redundand (vuoto), vale a dire quelli che non sono utilizzati in prevedere e mezzi di stampa, i pesi e covariations.
Se si fanno diversi tentativi con i dati di domanda OP, si possono trovare due risultati diversi:
>>> m = sklearn.mixture.DPGMM(n_components=5, n_iter=1000, alpha=1).fit(data)
>>> m.predict(data)
array([0, 0, 0, 0, 0, 1, 1, 1])
>>> pprint(m, data)
[[ 0.62019109 1.16867356]
[ 0.10658447 0.19810279]
[ 1.08287064 12.43049771]]
e
>>> m = sklearn.mixture.DPGMM(n_components=5, n_iter=1000, alpha=1).fit(data)
>>> m.predict(data)
array([1, 1, 1, 0, 1, 0, 0, 0])
>>> pprint(m, data)
[[ 1.24122696 0.64252404]
[ 0.17157736 0.17416976]
[ 11.51813929 1.07829109]]
allora si può intuire che le cause dei risultati inaspettati stanno nel fatto che alcuni dei risultati intermedi (1.2 nel nostro caso) migrano tra le classi e il metodo non è in grado di dedurre parametri di modello corretti. Una ragione è che paramether clustering, alfa è troppo grande per le nostre cluster, contenente solo 3 elementi ciascuno, possiamo provare meglio riducendo tale paramether, 0.1
darà risultati più stabili:
>>> m = sklearn.mixture.DPGMM(n_components=5, n_iter=1000, alpha=.1).fit(data)
>>> m.predict(data)
array([1, 1, 1, 1, 1, 0, 0, 0])
Ma la causa principale risiede nella natura stohastic del metodo DPGMM, il metodo non è in grado di inferire la struttura del modello in caso di cluster di piccole dimensioni. Le cose diventano meglio, e il metodo si comportano più come previsto, se estendiamo osservazioni 4 volte:
>>> m = sklearn.mixture.DPGMM(n_components=5, n_iter=1000, alpha=1).fit(data*4)
>>> pprint(m, data)
[[ 0.90400296 5.46990901]
[ 0.11166431 0.24956023]
[ 1.02250372 1.31278926]]
In conclusione, essere cauti con metodo paramethers montaggio, e consapevoli del fatto che alcuni metodi ML non funzionano bene in caso di set di dati piccoli o distorti.
Qualsiasi motivo specifico per cui si sta utilizzando la versione 0.12? – Rohit