《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
- 考虑第一个参数:k
这是KNN算法中是一个极其关键的参数,放在KNN实例构造器里,考虑到并非持久化参数,所以也给出setter接口。
- 考虑第二个参数:距离计算公式
由于这部分和KNN算法并不是紧耦合,于是设计成函数式接口、并用一个类用静态方法给予距离函数不同实现,如欧几里得距离、哈密顿距离等等。
- 考虑第三个参数:决策函数
决策函数的实现和KNN算法紧耦合,所以在KNN算法中用公共枚举类,将参暴露出来,并在类的内部给予实现。
public enum DecisionFunction {
MajorityVote,
WeightedMajorityVote;
}
如下图便是这次KNN算法实现的基本框架:
设计理由如下:
-
每一个KNN实例提供未知数据的分类或回归的功能;
-
每一个KNN实例是分类器或回归器。
-
每一个KNN实例都依赖一个KNN训练模型,KNN训练模型提供搜索未知数据点的 k k k个近邻的功能。
-
KNN训练模型可以有不同的实现方式,暴力的,KD树的,等等。
-
样本点规范了数据集的格式,易于操作。
下面三张图是详细的类的方法的设计。
k-d树(k-di