2013-11-28 18 views
5

Znalazłem this przykład użycia algorytmu kmeans2 w pythonie. Nie mogę się następujący udziałUżywanie funkcji kmeans2 scipy w pytonie

# make some z vlues 
z = numpy.sin(xy[:,1]-0.2*xy[:,1]) 

# whiten them 
z = whiten(z) 

# let scipy do its magic (k==3 groups) 
res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3) 

punkty są zip(xy[:,0],xy[:,1]), więc jaka jest wartość trzeci z tu robi?

Co to jest wybielanie?

Wszelkie wyjaśnienia są mile widziane. Dzięki.

Odpowiedz

9

pierwsze:

# make some z vlues 
z = numpy.sin(xy[:,1]-0.2*xy[:,1]) 

Najdziwniejsze jest to, że jest to równoznaczne z:

z = numpy.sin(0.8*xy[:, 1]) 

Więc nie wiem dlaczego on napisany w ten sposób. może jest literówka?

Następnie

# whiten them 
z = whiten(z) 

wybielanie jest po prostu normalizacji wariancji populacji. Zobacz tutaj demo:

>>> z = np.sin(.8*xy[:, 1])  # the original z 
>>> zw = vq.whiten(z)   # save it under a different name 
>>> zn = z/z.std()    # make another 'normalized' array 
>>> map(np.std, [z, zw, zn])  # standard deviations of the three arrays 
[0.42645, 1.0, 1.0] 
>>> np.allclose(zw, zn)   # whitened is the same as normalized 
True 

To nie jest dla mnie oczywiste, dlaczego jest wybielony. W każdym razie, poruszający się po:

# let scipy do its magic (k==3 groups) 
res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3) 

Złammy że na dwie części:

data = np.array(zip(xy[:, 0], xy[:, 1], z)) 

co jest dziwne (i wolne) sposób pisania

data = np.column_stack([xy, z]) 

W każdym razie, na początek z dwoma tablicami i połączyć je w jeden:

>>> xy.shape 
(30, 2) 
>>> z.shape 
(30,) 
>>> data.shape 
(30, 3) 

Potem nadszedł data, który jest przekazywany do algorytmu kmeans:

res, idx = vq.kmeans2(data, 3) 

Więc teraz widać, że jest to 30 punktów w przestrzeni 3d, które są przekazywane do algorytmu i mylące jest to, w jaki sposób zbiór punktów powstały .

+0

Oto moja wątpliwość, jaki jest pożytek z trzeciej wartości "z", kiedy wszystko, co muszę zrobić, to zastosować k-średnich do punktów 2D. Jednak dzięki za "wybielanie jest normalizowanie wariancji". Teraz dostaję tę część. Może "z", trzecia współrzędna służy do dzielenia zbioru punktów na dobrze zdefiniowane klastry, tak, że po wykreśleniu widzimy pewne znaczące skupienia. – kamalbanga

+0

@kamalbanga, myślę, że punktem przykładu, z którym łączyłeś się, jest zastosowanie kmeans do punktów 3d. – askewchan

Powiązane problemy