nie duża różnica w wersji 0.14.1 z sklearn. Użyję następujący kod do drukowania modelu DPGMM:
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)
Funkcja ta filtruje redundantnych (pusty) komponenty, tj te nie są wykorzystywane w przewidzenia, a środki drukujące, obciążniki i covariations.
Jeśli ktoś zrobić kilka prób z danymi z PO pytaniu, można znaleźć dwa różne wyniki:
>>> 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]]
i
>>> 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]]
wtedy można się domyślać, że nieoczekiwane przyczyny wynik leżeć w tym, że niektóre z wyników pośrednich (w naszym przypadku 1,2) migrują pomiędzy klasami, a metoda nie jest w stanie wywnioskować poprawnych parametrów modelu. Jednym z powodów jest to, że klastry paramether, alfa jest zbyt duży dla naszych klastrów, zawierających tylko 3 elementy każda, możemy spróbować lepiej przez zmniejszenie tej paramether, 0.1
dadzą bardziej stabilne wyniki:
>>> 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])
Ale przyczyna leży w W przypadku niewielkich klastrów metoda ta jest niemożliwa do wnioskowania o strukturze stohastycznej metody DPGMM. Rzeczy stają się lepsze, i sposób zachowują się zgodnie z oczekiwaniami, jeśli rozszerzymy uwag właściwie 4 razy:
>>> 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]]
Podsumowując, należy uważać metodą paramethers montażu i świadomy faktu, że niektóre metody ML nie działają dobrze w przypadku małe lub wypaczone zbiory danych.
Jakiś konkretny powód, dla którego używasz wersji 0.12? – Rohit