Dlaczego zmienne danych pociągu i danych testowych są definiowane za pomocą dużej litery (w Pythonie)?

15

Mam nadzieję, że to pytanie jest najbardziej odpowiednie na tej stronie ...

W Pythonie zwykle nazwa klasy jest definiowana na przykład za pomocą dużej litery

class Vehicle:
    ...

Jednak w dziedzinie uczenia maszynowego dane treningowe i testowe często są definiowane jako Xi Y- nie xi y. Na przykład teraz czytam ten samouczek na temat Keras , ale używa on Xi Yjako jego zmiennych:

from sklearn import datasets

mnist = datasets.load_digits()
X = mnist.data
Y = mnist.target

Dlaczego są one zdefiniowane jako wielkie litery? Czy istnieje jakaś konwencja (przynajmniej w Pythonie) w dziedzinie uczenia maszynowego, że lepiej jest używać dużej litery do definiowania tych zmiennych?

A może ludzie uczą się rozróżniać duże i małe litery w uczeniu maszynowym?

W rzeczywistości ten sam poradnik rozróżnia te zmienne w następujący sposób:

from sklearn.cross_validation import train_test_split

train_X, test_X, train_y, test_y = train_test_split(X, Y, train_size=0.7, random_state=0)
Blaszard
źródło
Jestem pewien, że większość z nas miała to pytanie, ale czułam się zbyt głupio, by zadawać lol. Dzięki :)
Ankit Bindal

Odpowiedzi:

20

Zmienne X (a czasem Y) są macierzami.

W niektórych notacjach matematycznych powszechną praktyką jest pisanie nazw zmiennych wektorowych małymi literami, a nazw zmiennych macierzowych dużymi literami. Często są one pogrubione lub mają inne adnotacje, ale nie przekładają się one dobrze na kod. Tak czy inaczej, uważam, że praktyka przeszła z tego zapisu.

Możesz również zauważyć w kodzie, że zmienna docelowa jest pojedynczą kolumną wartości, jest zapisana y, więc maszX, y

Oczywiście nie ma to specjalnego znaczenia semantycznego w Pythonie i możesz zignorować konwencję. Ponieważ jednak stał się konwencją, warto go zachować, jeśli udostępniasz swój kod.

Neil Slater
źródło
8

Myślę, że nie ma to nic wspólnego z Pythonem, ale z matematyką. X jest macierzą, a y jest wektorem (przez większość czasu). Zwykle wielkie litery są używane w macierzach, a małe litery są używane w wektorach.

Dlatego często widzisz coś takiego ( z przykładów sklearn ):

digits = datasets.load_digits(n_class=10)
X = digits.data
y = digits.target

lub że (z tego samego przykładu):

x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
X_red = (X_red - x_min) / (x_max - x_min)

Tutaj X_red jest macierzą mxn (wielkie litery), a x_min jest wektorem (małe litery) o długości n.

stmax
źródło
Ach, to ma sens. Zapomniałem o tym. Ale dlaczego jest Ytakże wielka, mimo że jest wektorem? ( Y.shapezwraca (1797,), FYI)
Blaszard
1
@Blaszard: Oczekuję, że w takim przypadku ktoś nie zastosuje się do konwencji. W przypadku MNIST i podobnych klasyfikatorów wieloklasowych istnieje dodatkowa komplikacja polegająca na tym, że zmienna docelowa może zmieniać formę między listą identyfikatorów klas (wektor) a listą kodowań jednokierunkowych (macierz).
Neil Slater,
@NeilSlater Ah, to ma sens. Dziękujemy za kontynuację.
Blaszard,