KNN算法JAVA实现

本文介绍了KNN算法的基本原理,当K=3时如何进行分类,并探讨了算法的优缺点。通过Java代码展示了如何读取数据、归一化、选取测试与训练样本以及计算距离。最后,对算法进行了测试并输出了错误率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KNN算法是一种分类算法,其实啊,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
在这里插入图片描述

例如当K=3的时候,也就是取最靠近样本点的三个数据,然后看这三个数据大多数是什么类型的,就将样本点归为什么类;

所以在代码中可以根据距离计算判断:例如二维数据

在这里插入图片描述

KNN算法优点

简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。模型训练时间快,上面说到KNN算法是惰性的,这里也就不再过多讲述。预测效果好,对异常值不敏感,毕竟取多数的数据。

KNN算法缺点

对内存要求较高,因为该算法存储了所有训练数据,预测阶段可能很慢
对不相关的功能和数据规模敏感。

具体代码实现,这里使用matlab生成总数据集data.txt,有1000条数据
编程语言采用我喜欢的Java。原理都一样,语言只是工具,嘿嘿。
在这里插入图片描述

首先是肯定是读取data,txt文件,将数据保存在List集合中:
集合中用Data类封装数据.

//数据类
public class Data implements Comparable<Data>{
   
     // 每年获得的飞行常客里程数
    private double mile;
     // 玩视频游戏所耗时间百分比
    private double time;
     // 每周消费的冰淇淋公升数
    private double icecream;
      //   1 代表不喜欢的人
      //   2 代表魅力一般的人
      //    3 代表极具魅力的人
    private int type;
     // 两个数据距离
    private double distance;
@Override
public int compareTo(Data o) {
   
    if (this.distance < o.getDistance()) {
   
        return -1;
    }else if (this.distance  > o.getDistance()) {
   
        return 1;
    }
    return 0;
}
}
//省略getter 和setter方法,实现Comparable接口后可以实现compareTo方法,自定义排序规则。

接下来读取文件数据:采用BufferedReader类对文件进行读取

//解析传入的文件名对应的文件数据
private List<Data> initDataSet(String fileName) throws IOException {
   
    List<Data> list = new ArrayList<Data>();
    BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
    String line = null;
    while ((line = bufferedReader.readLine()) != null) {
   
        Data data = new Data();
        String[] s = line.split("\t");
        data.setMile(Double.parseDouble(s[0]));
        data.setTime(Double.parseDouble(s[1]));
        data.setIcecream(Double.parseDouble(s[2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值