Pourquoi les variables des données de train et de test sont-elles définies en utilisant la lettre majuscule (en Python)?

15

J'espère que cette question est la plus appropriée sur ce site ...

En Python, le nom de classe est généralement défini en utilisant la majuscule comme premier caractère, par exemple

class Vehicle:
    ...

Cependant, dans le domaine de l'apprentissage automatique, les données d'entraînement et de test sont souvent définies comme Xet Y- pas xet y. Par exemple, je lis maintenant ce tutoriel sur Keras , mais il utilise le Xet Yses variables:

from sklearn import datasets

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

Pourquoi sont-ils définis comme des majuscules? Existe-t-il une convention (au moins en Python) dans le domaine de l'apprentissage automatique selon laquelle il est préférable d'utiliser la lettre majuscule pour définir ces variables?

Ou peut-être que les gens distinguent les variables majuscules des minuscules dans l'apprentissage automatique?

En fait, le même didacticiel distingue plus tard ces variables comme suit:

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
la source
Je suis sûr que la plupart d'entre nous avaient cette question mais se sentaient trop idiots pour demander lol. Merci :)
Ankit Bindal

Réponses:

20

Les variables X (et parfois Y) sont des matrices.

Dans certaines notations mathématiques, il est courant d'écrire les noms de variables vectorielles en minuscules et les noms de variables matricielles en majuscules. Souvent, ceux-ci sont en gras ou ont d'autres annotations, mais cela ne se traduit pas bien en code. Quoi qu'il en soit, je pense que la pratique est passée de cette notation.

Vous pouvez également remarquer dans le code, lorsque la variable cible est une seule colonne de valeurs, elle est écrite y, vous avez doncX, y

Bien sûr, cela n'a pas de signification sémantique particulière en Python et vous êtes libre d'ignorer la convention. Cependant, comme c'est devenu une convention, il peut être utile de la conserver si vous partagez votre code.

Neil Slater
la source
8

Je pense que cela n'a rien à voir avec Python mais avec les mathématiques. X est une matrice et y est un vecteur (la plupart du temps). Habituellement, les lettres majuscules sont utilisées pour les matrices et les lettres minuscules pour les vecteurs.

C'est pourquoi vous voyez souvent quelque chose comme ça (à partir d'exemples sklearn ):

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

ou que (du même exemple):

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)

Ici X_red est une matrice mxn (majuscule) et x_min est un vecteur (minuscule) de longueur n.

stmax
la source
Ah ça a du sens. Je l'ai oublié. Mais alors pourquoi est-il Yégalement en majuscules alors qu'il s'agit d'un vecteur? ( Y.shaperetourne (1797,), pour
info
1
@Blaszard: Je m'attends à ce que quelqu'un ne respecte pas la convention. Avec MNIST et les classificateurs multi-classes similaires, il existe une complication supplémentaire en ce que la variable cible peut changer de forme entre une liste d'ID de classe (un vecteur) et une liste de codages à chaud (une matrice).
Neil Slater
@NeilSlater Ah c'est logique. Merci pour le suivi.
Blaszard