【小白笔记】KNN 核心预测函数 _predict_one 的过程

KNN 核心预测函数 _predict_one 的过程,本质上就是在用 PyTorch 的能力,一步步实现欧几里得距离公式 ,并进行多数表决。


核心预测函数 _predict_one 记忆口诀(三步法)

步骤 目标 核心口诀 (PyTorch 链式操作) 记忆代码行 (骨架)
第一步 算距离 (L2 范数) 扩展 → 相减 → 平方 → 求和 → 开方 torch.sqrt(torch.sum( (X_train - x_new.unsqueeze(0)).pow(2), dim=1))
第二步 找邻居 距离排序 → 取前 K 个索引 k_indices = torch.argsort(distances)[:self.k]
第三步 定类别 标签索引 → 移回 CPU → 多数表决 Counter(y_train[k_indices].cpu().tolist()).most_common(1)[0][0]

核心代码精简解读与记忆点

下面是您需要背诵的、最核心的部分,每行都给出了精简的记忆提示:

A. 步骤 1:计算欧几里得距离 (L2 Distance)
代码行 目的/功能 关键记忆点
x_new_expanded = x_new.unsqueeze(0) 形状准备 。将 ( N feat , ) (N_{\text{feat}},) (Nfeat,) 变成 ( 1 , N feat ) (1, N_{\text{feat}}) (1,Nfeat), 准备广播。 unsqueeze(0):加 1 维,激活广播。
differences = self.X_train - x_new_expanded 算差值。利用广播机制,计算新点与所有训练点的差。 X_train - ...:张量广播相减。
squared_differences = differences.pow(2) 算平方。对所有差值进行平方。 .pow(2):欧氏距离公式的第一步。
sum_squared_diff = torch.sum(squared_differences, dim=1) 算求和 。沿着特征轴 (dim=1) 求和,得到距离平方。 torch.sum(..., dim=1):沿着特征维求和。
distances = torch.sqrt(sum_squared_diff) 算开方。最终得到欧几里得距离。 torch.sqrt(...):距离计算完成。
B. 步骤 2:找到 K 个最近邻居
代码行 目的/功能 关键记忆点
k_indices = torch.argsort(distances)[:self.k] 找索引 。对所有距离排序,并取出前 K 个最小距离的索引。 argsort():self.k:排序后取前 K 个。
C. 步骤 3:多数表决 (Majority Voting)
代码行 目的/功能 关键记忆点
k_nearest_labels_torch = self.y_train[k_indices] 取标签。根据索引从训练标签中取出 K 个邻居的标签。 y_traink_indices:张量索引。
k_nearest_labels_cpu = k_nearest_labels_torch.cpu().tolist() 数据桥接 。将标签张量移回 CPU 并转为 Python 列表,以使用 Counter。 .cpu().tolist():关键的 CPU 转换步骤。
most_common = Counter(k_nearest_labels_cpu).most_common(1) 统计投票。找出出现次数最多的类别。 Counter().most_common(1):多数表决。
return most_common[0][0] 返回结果。提取出频率最高的类别标签。 00:提取最终标签值。

掌握这三步法和对应口诀,就能快速重现 _predict_one 的核心逻辑了。

相关推荐
滕州市燕猫虎计算机科技工作室个体工商户3 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
志尊宝4 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
后季暖5 小时前
电商问数笔记(2)
笔记
xier_ran5 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
星恒随风7 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考7 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
ClinicTech8 小时前
婴儿培养箱技术笔记:温控、报警与数据记录的三层架构
笔记
xiaominngtongxue9 小时前
从一次接触网实训课看中职实训教学的组织逻辑
笔记
xier_ran9 小时前
【infra之路】AI 编译器学习笔记(四):PatternRewriter 与贪心 driver
人工智能·笔记·学习
ACP广源盛1392462567310 小时前
硬件选型笔记|国产 PCIe4.0 交换芯片 IX8012@ACP,边缘 AI 设备 IO 扩展方案探讨
人工智能·笔记·硬件架构·pcie·国产芯片