왜 열차 및 테스트 데이터의 변수가 대문자를 사용하여 정의됩니까 (파이썬)?


15

이 질문이이 사이트에서 가장 적합하기를 바랍니다.

Python에서 일반적으로 클래스 이름은 대문자를 첫 문자로 사용하여 정의됩니다 (예 :

class Vehicle:
    ...

그러나, 기계 학습 분야에서, 종종는 훈련과 테스트 데이터는 다음과 같이 정의 X하고 Y-하지 xy. 예를 들어, Keras에서이 튜토리얼을 읽고 있지만 Xand Y를 변수로 사용합니다 .

from sklearn import datasets

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

왜 대문자로 정의되어 있습니까? 머신 러닝 분야에서 대문자를 사용하여 이러한 변수를 정의하는 것이 더 나은 규칙이 있습니까 (적어도 Python에서는)?

아니면 사람들이 기계 학습에서 대문자와 소문자 변수를 구별합니까?

실제로 동일한 학습서에서 다음과 같이 이러한 변수를 구별합니다.

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)

나는 우리 대부분 이이 질문을 가지고 있다고 확신하지만 lol에게 물어보기에는 너무 바보 같은 느낌이 들었습니다. 감사합니다 :)
Ankit Bindal

답변:


20

X (때로는 Y) 변수는 행렬입니다.

일부 수학 표기법에서는 벡터 변수 이름을 소문자로, 행렬 변수 이름을 대문자로 쓰는 것이 일반적입니다. 종종 굵게 표시되거나 다른 주석이 있지만 코드로 잘 변환되지 않는 경우가 있습니다. 어느 쪽이든, 나는 그 관행이이 표기법에서 옮겨 졌다고 믿는다.

대상 변수가 단일 값 열인 경우 코드에서 알 수 있으므로 코드에서 알 y수 있습니다.X, y

물론 이것은 파이썬에서 특별한 의미 론적 의미가 없으며 규칙을 무시할 수 있습니다. 그러나 이것이 컨벤션이되었으므로 코드를 공유하면 유지 관리하는 것이 좋습니다.


8

나는 이것이 파이썬과 관련이 없으며 수학과 관련이 있다고 생각합니다. X는 행렬이고 y는 벡터입니다 (대부분의 시간). 일반적으로 대문자는 행렬에 사용되고 소문자는 벡터에 사용됩니다.

그렇기 때문에 종종 sklearn 예제에서 다음과 같은 것을 볼 수 있습니다 .

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

또는 (같은 예제에서) :

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)

여기서 X_red는 mxn 행렬 (대문자)이고 x_min은 길이 n의 벡터 (소문자)입니다.


아 맞다. 잊어 버렸습니다. 그러나 왜 Y벡터 임에도 불구하고 대문자입니까? ( FYI를 Y.shape반환 (1797,))
Blaszard

1
@Blaszard :이 경우 누군가가 컨벤션을 따르지 않았을 것으로 예상됩니다. MNIST 및 이와 유사한 다중 클래스 분류기를 사용하면 대상 변수가 클래스 ID 목록 (벡터)과 one-hot 인코딩 목록 (매트릭스) 사이에서 형식을 변경할 수 있다는 복잡한 문제가 있습니다.
Neil Slater

@NeilSlater 아 이해가 되네요. 후속 감사합니다.
Blaszard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.