O(1) 위치만 알면)O(n))class Node:
def __init__(self, data):
self.data = data
self.next = None
push (데이터 추가)pop (데이터 제거)peek (맨 위 데이터 확인)stack = []
stack.append(1)
stack.append(2)
stack.pop() # 2 제거
enqueue (삽입)dequeue (삭제)from collections import deque
queue = deque()
queue.append(1)
queue.append(2)
queue.popleft() # 1 제거
결정트리는 데이터를 분할하여 예측을 수행하는 지도학습(Supervised Learning) 알고리즘으로, 분류(Classification) 및 회귀(Regression) 문제에 모두 사용됩니다. 마치 질문을 따라가며 답을 찾는 과정과 비슷하여 직관적이고 해석이 쉬운 것이 큰 장점입니다.
| 용어 | 설명 |
|---|---|
| 루트 노드(Root Node) | 트리의 시작점으로, 전체 데이터셋을 나타냅니다. |
| 내부 노드(Internal Node) | 분할 기준이 있는 노드 (조건 노드) |
| 리프 노드(Leaf Node) | 최종 결과가 나오는 노드 (예측값 or 클래스) |
| 분할(Split) | 조건에 따라 데이터를 나누는 것 |
| 가지(Branch) | 조건 결과로 나뉘는 경로 |
결정트리는 너무 깊게 성장하면 훈련 데이터에 과적합(Overfitting)할 수 있습니다. 이를 방지하기 위해:
max_depth, min_samples_split 설정K-최근접 이웃(KNN, K-Nearest Neighbors)은 지도학습(Supervised Learning) 알고리즘 중 하나로, 분류(Classification)와 회귀(Regression) 모두에 사용됩니다.
이 알고리즘은 훈련 데이터를 사용해 모델을 학습하지 않고, 예측 시점에 가장 가까운 이웃을 기준으로 판단하기 때문에 비모수적(non-parametric)이고 게으른 학습(lazy learning)에 속합니다.
예:
어떤 새로운 점이 주변에서 파랑: 3개, 빨강: 2개의 이웃이 있다면 → 예측 클래스는 파랑
KNN에서 가장 중요한 요소는 데이터 간의 거리(distance)입니다. 대표적인 거리 계산 방식은 다음과 같습니다:
유클리디안 거리 (Euclidean Distance)
맨해튼 거리 (Manhattan Distance)
민코우스키 거리 (Minkowski Distance)
※ → 맨해튼 거리, → 유클리디안 거리
K는 이웃의 수를 의미하며 모델의 성능에 큰 영향을 미칩니다.📌 일반적으로 홀수 K값을 사용하여 동률 방지
| 항목 | 설명 |
|---|---|
| 학습 없음 | 데이터를 저장만 하고, 예측 시 계산함 |
| 계산량 큼 | 새로운 데이터마다 거리 계산이 필요 |
| 정규화 필수 | 거리 기반 알고리즘이므로 스케일 영향 큼 |
| 다차원에 취약 | 고차원 데이터에서는 희소해져 성능 저하 가능 (차원의 저주) |