KNN算法属于监督学习算法,是一种用于分类的非常简单的算法。简单的说,KNN算法采用测量不同特征值之间的距离方法进行分类。具体算法如下:
1)计算已知类别数据集中的点与当前点之间的距离
2)按照距离递增次序排序
3)选取与当前距离最小的k个点
4)确定前k个点所在类别的出现频率
5)返回前k个点出现频率最高的类别作为当前点的预测分类
这次的数据集来自《机器学习实战》一书的约会网站配对这一案例。格式如下:
这四列依次为:每年获得的飞行常客里程数;玩视频游戏所耗时间百分比;每周消费的冰淇淋公升数;以及对该对象的评价。为了将最后一项评价也转换成数字,我定义的规则为:didntLike为1;smallDoses为2;largeDoses为3;共900条训练数据,另准备了100条相同格式的测试数据用于最后计算错误率。
将这三维数据集任取两列作得散点图如下:
取不同的特征,最后呈现的效果也不同。但从上面两图可以看出,实验用的数据集呈现聚类现象,利于做分类。
package knn;
/**
* @author shenchao
*
* 封装一条数据
*
*/
public class Data implements Comparable<Data>{
/**
* 每年获得的飞行常客里程数
*/
private double mile;
/**
* 玩视频游戏所耗时间百分比
*/
private double time;
/**
* 每周消费的冰淇淋公升数
*/
private double icecream;
/**
* 1 代表不喜欢的人
* 2 代表魅力一般的人
* 3