KNN,即K近邻算法。其基本思想或者说是实现步骤如下:
(1)计算样本数据点到每个已知类别的数据集中点的距离
(2)将(1)中得到的距离按递增顺序排列
(3)选取(2)中前K个点(即与当前样本距离最小的K个已知类别的数据点)
(4)统计(3)中得到的K个点所在类别的出现频率
(5)返回(4)中出现频率最高的类别作为样本点的预测类别
在给出具体实现代码之前,说明一点:Java下的矩阵操作类基于开源jama包,我自己基于它的源码,做了部分必要的扩充和修改。
具体实现代码如下:
/**
* Created by Song on 2016/9/30.
*/
public class KnnHandler implements DMHandler {
//训练集中,每个特征的最小值
private Matrix minVals;
//训练集中,每个特征的最大值
private Matrix maxVals;
//训练集中,每个特征的取值范围
private Matrix ranges;
public KnnHandler(Matrix dataSet){
double [][] minMax = dataSet.getMinMax();
this.minVals = new Matrix(minMax[0],1);
this.maxVals = <