【JAVA实现】K-近邻(KNN)分类算法

本文介绍了K-近邻(KNN)算法的原理和步骤,包括计算距离、排序、选择K个最近邻点及确定分类。通过《机器学习实战》中的约会网站配对案例进行说明,展示了数据的可视化效果,并使用Java实现算法,测试结果显示错误率为8%。尽管KNN简单有效,但存在存储需求大、计算耗时及无法提供数据结构信息等缺点。
摘要由CSDN通过智能技术生成

       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
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值