--- id: wiki-2026-0508-manhattan-distance title: Manhattan Distance category: 10_Wiki/Topics status: verified canonical_id: self aliases: [L1 Distance, Taxicab Distance, City Block Distance] duplicate_of: none source_trust_level: A confidence_score: 0.95 verification_status: applied tags: [math, ml, distance-metric, knn, clustering] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: { language: python, framework: numpy-sklearn } --- # Manhattan Distance ## 매 한 줄 > **"매 격자에서의 걸음 수"**. L1 = Σ|xᵢ - yᵢ|. Outlier에 robust하고 sparse·high-dim에서 Euclidean보다 잘 작동하며, L1 정규화/Lasso의 기반. ## 매 핵심 ### 매 정의 - **Manhattan / L1**: $d(x,y) = \sum_i |x_i - y_i|$ - **Euclidean / L2**: $\sqrt{\sum_i (x_i - y_i)^2}$ - **Minkowski p**: $\left(\sum |x_i-y_i|^p\right)^{1/p}$ — p=1: Manhattan, p=2: Euclidean. - **Chebyshev / L∞**: max차원. ### 매 특성 1. 삼각 부등식 만족 → 진짜 metric. 2. 좌표 회전에 비불변 (Euclidean과 다름). 3. 차원의 저주에 덜 취약 (high-dim 검색에서 유리). 4. Outlier에 quadratic 아닌 linear 영향. 5. 미분 불가 at 0 → subgradient (Lasso 최적화). ## 💻 패턴 ### Pattern 1 — NumPy ```python import numpy as np d = np.sum(np.abs(x - y)) # 행렬: cdist from scipy.spatial.distance import cdist D = cdist(X, Y, metric='cityblock') ``` ### Pattern 2 — sklearn kNN ```python from sklearn.neighbors import KNeighborsClassifier clf = KNeighborsClassifier(n_neighbors=5, metric='manhattan') clf.fit(X_train, y_train) ``` ### Pattern 3 — DBSCAN with L1 ```python from sklearn.cluster import DBSCAN db = DBSCAN(eps=1.5, metric='manhattan').fit(X) ``` ### Pattern 4 — PyTorch ```python d = torch.cdist(X, Y, p=1) # L1 # Lasso loss loss = mse + alpha * w.abs().sum() ``` ### Pattern 5 — High-dim 비교 (Aggarwal 2001) ```python # 차원 d↑ 시 Euclidean의 contrast 무너짐 # fractional Lp (p<1)도 옵션 def fractional_dist(x, y, p=0.5): return (np.abs(x-y)**p).sum() ** (1/p) ``` ### Pattern 6 — 스케일 정규화 필수 ```python from sklearn.preprocessing import StandardScaler X_scaled = StandardScaler().fit_transform(X) # L1은 단위에 매우 민감 ``` ## 매 결정 기준 | 상황 | Metric | |---|---| | 일반 / continuous | **Euclidean (L2)** | | Outlier 많음 | **Manhattan (L1)** | | Sparse high-dim | **Manhattan** 또는 cosine | | 텍스트 임베딩 | cosine | | 범주형 우세 | Hamming / Gower | | Grid / Lattice 문제 | Manhattan (자연스러움) | | 시계열 | DTW | **기본값**: 정규화된 numeric은 L2, sparse/outlier-heavy는 L1. ## 🔗 Graph - 응용: [[KNN]], [[K-Means]] - Adjacent: [[Curse-of-Dimensionality]] ## 🤖 LLM 활용 **언제**: - Metric 선택 가이드 (데이터 특성 → 추천). - sklearn/numpy 코드 스니펫. - Lp norm 차이 설명. **언제 X**: - 도메인 특화 metric 설계 (실험 필수). - 매우 큰 데이터 ANN 라이브러리 선택 (벤치마크 필요). ## ❌ 안티패턴 - 스케일 정규화 없이 L1 (큰 단위 feature 지배). - Categorical 변수에 Manhattan (Hamming 적합). - 회전이 의미 있는 데이터에 L1 (좌표축 의존). - 모든 모델에 같은 metric 가정. - 차원의 저주 무시 (>50 dim에서 어떤 distance든 약함). ## 🧪 검증 / 중복 - Verified. 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup |