Чому змінні даних поїздів і тестів визначаються за допомогою великої літери (в Python)?


15

Я сподіваюся, що це питання є найбільш підходящим на цьому сайті ...

У Python, як правило, ім'я класу визначається за допомогою великої літери, наприклад, його першого символу

class Vehicle:
    ...

Однак у машинному навчальному полі часто дані тренувань і тестів визначаються як Xі Y- ні, xі - y. Наприклад, я зараз читаю цей підручник про Кераса , але він використовує Xі 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)

Я впевнений, що у більшості з нас виникло це питання, але я почував себе занадто нерозумно, щоб задати лол. Дякую :)
Ankit Bindal

Відповіді:


20

Змінні X (а іноді й Y) є матрицями.

У деяких математичних позначеннях прийнято писати імена векторних змінних як малі регістри, так і імена змінних матриць у верхньому регістрі. Часто вони є напівжирним шрифтом або мають інші анотації, але це не добре перекладається на код. Так чи інакше, я вважаю, що практика перейшла з цієї нотації.

Ви також можете помітити в коді, коли цільова змінна є одним стовпцем значень, вона записується y, так що у вас єX, y

Звичайно, це не має особливого смислового значення в Python, і ви можете ігнорувати конвенцію. Однак, оскільки це стало умовою, можливо, варто дотримуватися, якщо ви поділитесь кодом.


8

Я думаю, це не має нічого спільного з Python, а не з математикою. 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також великі регістри, незважаючи на те, що це вектор? ( Y.shapeповертається (1797,), FYI)
Blaszard

1
@Blaszard: Я очікую, що в такому випадку хтось не дотримується конвенції. З MNIST та подібними багатокласними класифікаторами є додаткове ускладнення в тому, що цільова змінна може змінювати форму між списком ідентифікаторів класу (вектором) та списком однокольорових кодувань (матриці).
Ніл Слейтер

@NeilSlater Ах, це має сенс. Дякую за подальші дії.
Blaszard
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.