2016-07-25 8 views
5

Biorę kurs uczenia maszynowego i było zalecenie (o dokonanie wyważenia klasach) używać następujący ciąg:Jak to jest, aby wziąć plasterek w ten sposób?

X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :] 

gdzie y_train jest dataframe pandy (który jest przekształcany jest do numpy array via as.matrix()). Nie rozumiem, jak można używać macierzy jako wskaźnika do krojenia.

+2

To się nazywa [indeksowanie boolowskie] (http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays). – ayhan

+0

Z dokumentacji SO: http://stackoverflow.com/documentation/numpy/1296/the-basics/6738/boolean-indexing#t=201607250121018073291 – ayhan

+0

To nie jest * ciąg *. To jest * kod *, a może odwołujesz się do * składni *. Ciąg jest rodzajem danych, takich jak '" tutaj jest jakiś tekst "'. Nie używaj go z innymi znaczeniami, gdy pytasz o programowanie. – Bakuriu

Odpowiedz

0

Może to pomóc w rozbiciu instrukcji na jej części składowe. To stwierdzenie jest równoważne następującej sekwencji instrukcji:

y = y_train.as_matrix() 
row_mask = y == 1 
X_masked = X_train[row_mask,:] 
X_train_to_add = X_masked[indices_to_add, :] 

Spójrzmy na konkretny przykład. Załóżmy y, X_train i indices_to_add mają następujące wartości:

>>> import numpy as np 
>>> y = np.array([1, 2, -1, 1, 1]) 
>>> X_train = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]) 
>>> indices_to_add = np.array([2, 0]) 

Najpierw tworzymy tablicę logiczną wskazującą, które elementy y są równe 1, co my nazywamy „maskę wiersza”.

>>> row_mask = y == 1 
>>> row_mask 
array([ True, False, False, True, True], dtype=bool) 

Następnie używamy maski rzędu wybrać rzędy X_train tak, że odpowiednie wartości row_maskTrue (lub równoważnie, wiersze, tak że odpowiadające im wartości y są równe 1).

>>> X_masked = X_train[row_mask,:] 
>>> X_masked 
array([[ 1, 2, 3], 
     [10, 11, 12], 
     [13, 14, 15]]) 

Wreszcie, używamy tablicy indeksów, aby wybrać określone wiersze z poprzedniego wyniku. Zauważ, że te indeksy odnoszą się do wierszy X_masked, a nie do oryginalnej matrycy X_train.

>>> X_train_to_add = X_masked[indices_to_add,:] 
>>> X_train_to_add 
array([[13, 14, 15], 
     [ 1, 2, 3]]) 

można zobaczyć więcej przykładów numpy indeksowania w documentation.

Powiązane problemy