Warum werden Variablen von Zug- und Testdaten mit dem Großbuchstaben (in Python) definiert?

13

Ich hoffe, diese Frage ist auf dieser Seite am besten geeignet ...

In Python wird der Klassenname normalerweise mit dem Großbuchstaben als erstem Zeichen definiert

class Vehicle:
    ...

Im Bereich des maschinellen Lernens werden Zug- und Testdaten jedoch häufig als Xund Y- nicht xund definiert y. Zum Beispiel lese ich jetzt dieses Tutorial über Keras , aber es verwendet das Xund Yals seine Variablen:

from sklearn import datasets

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

Warum werden diese als Großbuchstaben definiert? Gibt es eine Konvention (zumindest in Python) im Bereich des maschinellen Lernens, dass es besser ist, den Großbuchstaben zu verwenden, um diese Variablen zu definieren?

Oder unterscheiden Menschen beim maschinellen Lernen die Variablen in Groß- und Kleinschreibung?

Tatsächlich unterscheidet dasselbe Tutorial diese Variablen später wie folgt:

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
quelle

Antworten:

18

Die X- (und manchmal Y-) Variablen sind Matrizen.

In einigen mathematischen Notationen ist es üblich, Vektorvariablennamen als Kleinbuchstaben und Matrixvariablennamen als Großbuchstaben zu schreiben. Oft sind diese fett gedruckt oder haben andere Anmerkungen, aber das lässt sich nicht gut in Code übersetzen. In jedem Fall glaube ich, dass die Praxis von dieser Notation übernommen wurde.

Möglicherweise stellen Sie auch im Code fest, dass die Zielvariable, wenn sie eine einzelne Wertespalte ist y, so geschrieben ist , wie Sie es getan habenX, y

Natürlich hat dies in Python keine spezielle semantische Bedeutung und Sie können die Konvention ignorieren. Da es sich jedoch um eine Konvention handelt, kann es sich lohnen, diese beizubehalten, wenn Sie Ihren Code freigeben.

Neil Slater
quelle
8

Ich denke, das hat nichts mit Python zu tun, sondern mit Mathematik. X ist eine Matrix und y ist ein Vektor (meistens). Normalerweise werden Großbuchstaben für Matrizen und Kleinbuchstaben für Vektoren verwendet.

Deshalb sehen Sie oft so etwas ( aus sklearn-Beispielen ):

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

oder das (aus demselben Beispiel):

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)

Hier ist X_red eine mxn-Matrix (Großbuchstaben) und x_min ist ein Vektor (Kleinbuchstaben) der Länge n.

stmax
quelle
Ah das macht Sinn. Ich habe es vergessen. Aber warum wird dann Yauch Großbuchstabe geschrieben, obwohl es sich um einen Vektor handelt? ( Y.shapekehrt zurück (1797,), FYI)
Blaszard
1
@Blaszard: Ich gehe davon aus, dass in diesem Fall jemand die Konvention nicht befolgt hat. Bei MNIST und ähnlichen Klassifizierern für mehrere Klassen besteht eine zusätzliche Komplikation darin, dass die Zielvariable die Form zwischen einer Liste von Klassen-IDs (einem Vektor) und einer Liste von One-Hot-Codierungen (einer Matrix) ändern kann.
Neil Slater
@NeilSlater Ah das macht Sinn. Danke für das Follow-up.
Blaszard