题目描述
给定一个测试样本 xtest,以及训练集:
X=[x1,x2,…,xN]⊤∈RN×d,y=[y1,y2,…,yN]
其中:
- 每个样本 xi∈Rd
- 标签 yi∈{0,1}
请你实现 KNN 分类(K-Nearest Neighbors),并根据最近的 K 个邻居进行多数投票得到最终预测标签。
1. 距离计算
di=∥xtest−xi∥2
2. 寻找 K 个最近邻
NK={i1,i2,…,iK}
3. 多数投票预测
y^=mode(yi1,yi2,yiK)
输入参数
X:形状为 N×d 的训练数据矩阵
y:长度为 N 的训练标签列表
x_test:长度为 d 的测试样本
K:要选择的最近邻个数
返回值
示例
输入:
K = 2
X = [[1, 2], [2, 1], [3, 3]]
y = [0, 1, 1]
x_test = [2, 2]
输出:
y_pred = 1
提示
-
样本取值范围:
−1000≤X[i,j],xtest[j]≤1000
-
标签:
yi∈0,1
-
K 的范围:
1≤K≤N
-
距离总是非负:
d_i≥0