Por que as variáveis ​​dos dados de treinamento e teste são definidas usando a letra maiúscula (em Python)?

14

Espero que esta pergunta seja a mais adequada neste site ...

Em Python, geralmente o nome da classe é definido usando a letra maiúscula como seu primeiro caractere, por exemplo

class Vehicle:
    ...

No entanto, no campo de aprendizado de máquina, muitas vezes os dados de treinamento e teste são definidos como Xe Y- não xe y. Por exemplo, agora estou lendo este tutorial no Keras , mas ele usa as Xe Ycomo suas variáveis:

from sklearn import datasets

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

Por que estes são definidos como letras maiúsculas? Existe alguma convenção (pelo menos em Python) no campo de aprendizado de máquina de que é melhor usar a letra maiúscula para definir essas variáveis?

Ou talvez as pessoas distinguam as variáveis ​​maiúsculas e minúsculas no aprendizado de máquina?

De fato, o mesmo tutorial posteriormente distingue essas variáveis ​​da seguinte maneira:

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
fonte
Tenho certeza que a maioria de nós fez essa pergunta, mas me senti muito boba para perguntar lol. Obrigado :)
Ankit Bindal 14/03

Respostas:

19

As variáveis ​​X (e algumas vezes Y) são matrizes.

Em algumas notações matemáticas, é prática comum escrever nomes de variáveis ​​de vetor como minúsculas e nomes de variáveis ​​de matriz como maiúsculas. Geralmente, eles estão em negrito ou têm outras anotações, mas isso não se traduz bem no código. De qualquer maneira, acredito que a prática foi transferida dessa notação.

Você também pode observar no código, quando a variável de destino é uma única coluna de valores, ela é gravada y, então você temX, y

Obviamente, isso não tem significado semântico especial no Python e você é livre para ignorar a convenção. No entanto, como se tornou uma convenção, pode valer a pena mantê-lo se você compartilhar seu código.

Neil Slater
fonte
8

Eu acho que isso não tem nada a ver com Python, mas com matemática. X é uma matriz e y é um vetor (na maioria das vezes). Normalmente, letras maiúsculas são usadas para matrizes e letras minúsculas são usadas para vetores.

É por isso que você costuma ver algo assim ( nos exemplos do sklearn ):

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

ou que (do mesmo exemplo):

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)

Aqui X_red é uma matriz mxn (maiúscula) e x_min é um vetor (minúscula) de comprimento n.

stmax
fonte
Ah, isso faz sentido. Eu esqueci sobre isto. Mas então por que Ytambém é maiúsculo, apesar de ser um vetor? ( Y.shaperetornos (1797,), FYI)
Blaszard 15/03
1
@Blaszard: Espero que nesse caso alguém tenha falhado em seguir a convenção. Com o MNIST e classificadores multi-classe semelhantes, há uma complicação adicional, pois a variável de destino pode mudar de forma entre uma lista de IDs de classe (um vetor) e uma lista de codificações one-hot (uma matriz).
Neil Slater
@ NeilSlater Ah, isso faz sentido. Obrigado pelo acompanhamento.
Blaszard 15/03/19