Tại sao các biến của dữ liệu đào tạo và kiểm tra được xác định bằng chữ in hoa (bằng Python)?


13

Tôi hy vọng câu hỏi này là phù hợp nhất trong trang web này ...

Trong Python, thông thường tên lớp được định nghĩa bằng chữ in hoa làm ký tự đầu tiên của nó, ví dụ

class Vehicle:
    ...

Tuy nhiên, trong lĩnh vực máy học, thường thì dữ liệu đào tạo và kiểm tra được định nghĩa là XY- không xy. Ví dụ: tôi hiện đang đọc hướng dẫn này trên Keras , nhưng nó sử dụng XYnhư các biến của nó:

from sklearn import datasets

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

Tại sao chúng được định nghĩa là chữ in hoa? Có bất kỳ quy ước nào (ít nhất là trong Python) trong lĩnh vực máy học rằng tốt hơn là sử dụng chữ in hoa để xác định các biến này?

Hoặc có thể mọi người phân biệt các biến chữ hoa và chữ thường trong máy học?

Trong thực tế, cùng một hướng dẫn sau này phân biệt các biến này như sau:

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)

Câu trả lời:


18

Các biến X (và đôi khi Y) là ma trận.

Trong một số ký hiệu toán học, thông thường là viết tên biến vector là chữ thường và tên biến ma trận làm chữ hoa. Thông thường chúng được in đậm hoặc có chú thích khác, nhưng điều đó không dịch tốt sang mã. Dù bằng cách nào, tôi tin rằng thực tiễn đã được chuyển từ ký hiệu này.

Bạn cũng có thể nhận thấy trong mã, khi biến mục tiêu là một cột giá trị, nó được viết y, vì vậy bạn cóX, y

Tất nhiên, điều này không có ý nghĩa ngữ nghĩa đặc biệt trong Python và bạn có thể tự do bỏ qua quy ước. Tuy nhiên, vì nó đã trở thành một quy ước, nó có thể đáng để duy trì nếu bạn chia sẻ mã của mình.


8

Tôi nghĩ rằng điều này không liên quan gì đến Python nhưng với toán học. X là một ma trận và y là một vectơ (hầu hết thời gian). Thông thường chữ in hoa thường được sử dụng cho ma trận và chữ in thường được sử dụng cho vectơ.

Đó là lý do tại sao bạn thường thấy một cái gì đó như thế này ( từ các ví dụ về sklearn ):

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

hoặc đó (từ ví dụ tương tự):

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)

Ở đây X_red là ma trận mxn (chữ hoa) và x_min là một vectơ (chữ thường) có độ dài n.


Ah điều đó có ý nghĩa. Tôi đã quên điều đó. Nhưng tại sao Ycũng là chữ hoa mặc dù nó là một vector? ( Y.shapetrả lại (1797,), FYI)
Blaszard

1
@Blaszard: Tôi hy vọng trong trường hợp đó ai đó đã không tuân theo quy ước. Với MNIST và các trình phân loại đa lớp tương tự, có một sự phức tạp thêm vào đó là biến mục tiêu có thể thay đổi hình thức giữa danh sách id lớp (vectơ) và danh sách mã hóa một nóng (ma trận).
Neil Slater

@NeilSlater Ah có ý nghĩa. Cảm ơn vì đã theo dõi.
Blaszard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.