Почему переменные данных обучения и испытаний определяются с использованием заглавной буквы (в Python)?

15

Я надеюсь, что этот вопрос является наиболее подходящим на этом сайте ...

В Python обычно имя класса определяется с использованием заглавной буквы в качестве первого символа, например

class Vehicle:
    ...

Однако в области машинного обучения часто данные обучения и испытаний определяются как Xи Y- не xи y. Например, я сейчас читаю это руководство по 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)
Blaszard
источник
Я уверен, что у большинства из нас был этот вопрос, но я чувствовал себя слишком глупо, чтобы спрашивать лол. Спасибо :)
Анкит Биндал

Ответы:

20

Переменные X (а иногда и Y) являются матрицами.

В некоторых математических обозначениях принято записывать имена векторных переменных в нижнем регистре и имена матричных переменных в верхнем регистре. Часто они выделены жирным шрифтом или имеют другие аннотации, но это плохо переводится в код. В любом случае, я считаю, что практика перешла из этой записи.

Вы также можете заметить , в коде, когда целевая переменная один столбец значений, написано y, так что у вас естьX, y

Конечно, это не имеет особого семантического значения в Python, и вы можете игнорировать конвенции. Однако, поскольку это стало соглашением, возможно, стоит сохранить его, если вы поделитесь своим кодом.

Нил Слэйтер
источник
8

Я думаю, что это не имеет ничего общего с Python, но с математикой. X представляет собой матрицу и у вектора (большая часть времени). Обычно заглавные буквы используются для матриц и строчные буквы используются для векторов.

Вот почему вы часто видите что - то вроде этого ( из примеров 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 является тхп матрицы (верхний регистр) и x_min является вектором (в нижнем регистре) длины п.

stmax
источник
Ах, это имеет смысл. Я забыл об этом. Но тогда почему Yпрописные буквы, несмотря на то, что это вектор? ( Y.shapeвозвращается (1797,), к вашему сведению)
Блазард
1
@Blaszard: Я ожидаю, что в этом случае кто-то не смог выполнить соглашение. При использовании MNIST и подобных многоклассовых классификаторов возникает дополнительная сложность, заключающаяся в том, что целевая переменная может изменять форму между списком идентификаторов классов (вектором) и списком одноразовых кодировок (матрицы).
Нил Слэйтер
@NeilSlater Ах, это имеет смысл. Спасибо за продолжение.
Blaszard