有时会使用class中的knn模型实现knn分类的功能
该库使用c语言实现底层功能,运行速度快,且参数数量少使用方便(knn本身参数也没啥)
knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)
但,其对于“近邻”的定义采用了“模糊”概念,与常规理解近邻稍有区别:
假设 K = 3,给定测试样例 X 和 训练集 Train
传统理解中,从 Train 中找到与 X 距离最近的 3 个样例,进行多数投票确定 X 的预测类标;
class 实现中,从 Train 中可能找到 3 + n 个近邻样本,其中 3 是指传统理解中样例 X 的 3 个近邻样本,n 为与X与第三个近邻的距离“近似”相等的其他近邻样本
class 中设定了阈值 EPS = 1e-4,如果 满足(样本Z与X的距离)<= (第K个近邻与X的距离) * (1+EPS),则样本Z也选为近邻
那么,K=3时可能选择了多于3个近邻,此时如果
use.all = TRUE 时,使用所有这些样本投票;
use.all = FALSE 时,使用确定的K=3个近邻投票;
此时设定 use.all 的不同值可能会得到的不同的预测结果。