👾 Day 2: K 近邻
1️⃣【技术债与演进动机】The Technical Debt & Evolution
基于模型的算法需要训练过程,无法利用新样本。K 近邻是实例学习(惰性学习),直接存储训练数据用于预测。
2️⃣【直觉建立】Visual Intuition
想象在一个平面上,新点周围的 k 个最近邻居多数是红色,那它也被预测为红色。距离越近影响越大。
🎬 B 站搜索:K 近邻算法 直观解释
3️⃣【符号解码字典】The Symbol Decoder
$x$ → input_tensor (待预测样本,shape: [d])
$X$ → self.X_train (训练集,shape: [N, d])
$y$ → label (待预测标签)
$Y$ → self.y_train (训练标签,shape: [N])
$k$ → self.k (近邻数量)
$p$ → p (Lp 范数,p=2 为欧氏距离)
4️⃣【核心推导】The Math
### 距离计算(Lp 范数)
$$d(x, x^{(i)}) = \left( \sum_{j=1}^{d} |x^{(j)} - x^{(i)(j)}|^p \right)^{1/p}$$
当 $p=2$ 时为欧氏距离:
$$d(x, x^{(i)}) = \sqrt{\sum_{j=1}^{d} (x^{(j)} - x^{(i)(j)})^2}$$
### 投票规则
$$\hat{y} = \text{argmode}_{c} \sum_{i=1}^{k} \mathbb{I}(y^{(i)} = c)$$
其中 $\mathbb{I}(\cdot)$ 是指示函数,统计 k 个近邻中各类别出现次数。
5️⃣【工程优化点】The Optimization Bottleneck
预测时需要计算到所有训练样本的距离,复杂度 $O(N \cdot d)$。使用 KD 树或 Ball 树加速到 $O(\log N)$。
6️⃣【今日靶机】The OJ Mission
🎯 任务:cd exercises/ && python3 day2_task.py
实现 K 近邻的 distance 和 predict 函数,在手写数字数据集上验证 k 值对准确率的影响。