Kein großer Unterschied mit der Version 0.14.1 von sklearn. I wird folgende Code zum Drucken DPGMM Modell verwenden:
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)
Diese Funktion filtert redundant (leer) Komponenten, das heißt diejenigen, die nicht in vorherzusagen, und Druckmittel, Gewichte und Kovariationen verwendet. man kann
>>> 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]]
und
>>> 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]]
dann vermutet, dass unerwartete Ergebnis Ursachen liegen in der Tatsache,
dass:
Wenn man mehrere Versuche mit Daten von OP Frage stellen, eins zwei unterschiedliche Ergebnisse finden einige der Zwischenergebnisse (in unserem Fall 1.2) wandern zwischen den Klassen, und die Methode kann keine korrekten Modellparameter ableiten. Ein Grund dafür ist, dass Clustering paramether, alpha ist zu groß für unsere Cluster, die nur drei Elemente, die jeweils, können wir besser versuchen, diese paramether reduzieren, 0.1
geben stabilere Ergebnisse:
>>> 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])
Aber die Ursache liegt in Stohastic Natur der DPGMM-Methode, Methode ist unfähig, Modellstruktur im Falle von kleinen Clustern abzuleiten. Die Dinge werden besser, und Verfahren mehr wie erwartet verhalten, wenn wir Beobachtungen 4 mal verlängern:
>>> 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]]
Abschließend mit Methode Fitting paramethers vorsichtig sein und bewusst, dass einige ML Methoden nicht funktionieren gut bei kleine oder schiefe Datensätze.
Gibt es einen bestimmten Grund, warum Sie die 0.12-Version verwenden? – Rohit