| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- tauri
- Python
- vim
- Docker Compose
- pandas
- vscode
- fit_transform
- Ollama
- json
- 이미지
- Typescript
- curl
- UV
- scikit-learn
- RandomAccessFile
- Vite
- podman
- io
- Webpack
- cli
- json schema
- PowerShell
- Java
- DataFrameGroupBy
- FileChannel
- docker
- 정렬
- CSS
- scaler
- yaml
- Today
- Total
워로디스
머신러닝 코드에서 X는 대문자 y는 소문자로 쓰는 이유 본문
1. 결론
머신러닝에서 X는 여러 feature를 가진 입력 행렬이기 때문에 대문자로, y는 각 샘플의 정답을 나타내는 벡터이기 때문에 소문자로 쓰는 것이 일반적인 관습입니다.
Python 자체에서 X는 대문자, y는 소문자로 써야 한다는 규칙은 없습니다.
이 표기법은 주로 수학, 통계학, 머신러닝에서 사용해 온 관습에서 비롯되었습니다.
머신러닝 코드에서는 일반적으로 다음과 같이 사용합니다.
X = df[["age", "income", "height"]]
y = df["target"]
X: 모델에 입력되는 특성(feature) 데이터y: 모델이 예측하려는 정답 또는 타깃(target)
2. 왜 X는 대문자인가?
수학에서는 일반적으로 행렬(matrix)을 대문자로 표현하는 경우가 많습니다.
머신러닝에서 X는 보통 여러 개의 행과 열로 이루어진 2차원 데이터, 즉 행렬입니다.
예를 들어 다음과 같은 데이터가 있다고 가정합니다.
| sample | age | income |
|---|---|---|
| 1 | 20 | 3000 |
| 2 | 30 | 5000 |
| 3 | 40 | 7000 |
이를 단순히 표현하면 다음과 같습니다.
X = [
[20, 3000],
[30, 5000],
[40, 7000]
]
즉 X는 여러 샘플과 여러 feature를 가진 행렬 형태의 입력 데이터입니다.
그래서 관습적으로 대문자 X를 사용합니다.
3. 왜 y는 소문자인가?
수학에서는 일반적으로 벡터(vector)를 소문자로 표현하는 경우가 많습니다.
머신러닝에서 y는 각 샘플에 대응하는 하나의 정답값을 가지므로 보통 1차원 벡터입니다.
예를 들어:
y = [0, 1, 1]
각 값은 X의 각 행에 대응하는 정답입니다.
X y
------------------------
[20, 3000] -> 0
[30, 5000] -> 1
[40, 7000] -> 1
따라서 타깃 데이터는 관습적으로 소문자 y로 표현합니다.
4. X.shape과 y.shape
머신러닝에서는 shape을 보면 X와 y의 차이를 쉽게 이해할 수 있습니다.
X.shape
# (1000, 20)
y.shape
# (1000,)
각각 다음을 의미합니다.
X.shape == (1000, 20)
1000개 샘플 × 20개 feature
즉 데이터가 1000개 있고, 각 데이터마다 입력 변수(feature)가 20개 있다는 뜻입니다.
y.shape == (1000,)
1000개 샘플에 대응하는 정답 1000개
즉 각 샘플마다 하나의 정답이 있다는 뜻입니다.
정리하면 다음과 같습니다.
X : 입력 데이터 행렬
1000개 샘플 × 20개 feature
y : 정답 벡터
1000개의 정답
5. 머신러닝 코드에서의 실제 사용 예
from sklearn.model_selection import train_test_split
X = df[["age", "income", "height"]]
y = df["purchased"]
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2
)
각 변수의 의미는 다음과 같습니다.
X_train: 학습용 입력 데이터X_test: 테스트용 입력 데이터y_train: 학습용 정답 데이터y_test: 테스트용 정답 데이터
이 표기법이 널리 사용되기 때문에 머신러닝 코드를 읽을 때 X와 y만 봐도 데이터의 역할을 빠르게 파악할 수 있습니다.
6. 반드시 이렇게 써야 하는 것은 아니다
X, y 표기법은 Python 문법이 아니라 관습입니다.
따라서 다음과 같이 작성해도 아무 문제가 없습니다.
input_data = ...
target = ...
또는
features = ...
labels = ...
심지어 다음처럼 써도 Python 문법상 문제는 없습니다.
x = ...
Y = ...
다만 머신러닝에서는 X, y라는 표기법이 매우 널리 사용되므로 이 관습을 따르면 코드를 읽기 쉬워집니다.
7. Y를 대문자로 쓰는 경우
항상 타깃을 소문자 y로 쓰는 것은 아닙니다.
하나의 샘플에서 예측해야 하는 값이 여러 개라면 출력 데이터도 행렬이 될 수 있습니다.
예를 들어:
Y.shape
# (1000, 3)
이것은 다음과 같은 의미입니다.
1000개 샘플 × 3개 출력값
즉 각 샘플마다 3개의 값을 예측하는 경우입니다.
이처럼 출력 데이터도 행렬이라면 수학적 표기 관습에 따라 대문자 Y를 사용하기도 합니다.
8. 요약
| 기호 | 의미 | 일반적인 형태 | 표기 이유 |
|---|---|---|---|
X |
입력 feature | 2차원 행렬 | 행렬을 대문자로 쓰는 관습 |
y |
정답 또는 target | 1차원 벡터 | 벡터를 소문자로 쓰는 관습 |
Y |
여러 개의 target | 2차원 행렬 | 출력도 행렬인 경우 |
'Data Science' 카테고리의 다른 글
| 신경망의 층별 특징 학습과 해석 방법 정리 (0) | 2026.06.29 |
|---|---|
| 선형 회귀와 로지스틱 회귀의 본질적 구분 (0) | 2026.05.27 |
