HNUST 数据挖掘课设 《实验五 KNN算法设计与应用》

HNUST 数据挖掘课设 《实验五 KNN算法设计与应用》

KNN算法设计与应用

一、实验内容

1.实验要求在这里插入图片描述
2. 实验原理

K最近邻算法是一种常用的监督学习算法,它可以用于分类和回归问题。对于给定的测试样本,KNN 算法使用距离度量来衡量样本之间的相似度。常用的距离度量方法包括欧氏距离、曼哈顿距离、闵可夫斯基距离等,距离越小表示样本越相似。

3.程序流程图

在这里插入图片描述

二、代码

1. 实现思路

定义了一个Person类

    int id;
    String name;
    double height;
    String category;
    double heightDifference;

文件读取,从data.txt中读取需要的数据。内容如下:

在这里插入图片描述

 private static List<Person> readData(String fileName) throws Exception {
   
   
        List<Person> person = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String line = br.readLine(); // 读取第一行标题行
        while ((line = br.readLine()) != null) {
   
   
            // 使用正则表达式匹配连续的空格
            String[] parts = line.split("\\s+");
            // 直接取整数部分
            int id = Integer.parseInt(parts[0]);
            String name = parts[1].trim();
            double height = Double.parseDouble(parts[2].trim());
            String category = parts[3].trim();
            Person pers = new Person(id, name, height, category, 0);
            person.add(pers);
        }
        br.close();
        return person;
    }

1.计算测试记录(unknownPerson)和数据集中每个元组的身高差,并将其存储在 heightDifference 属性中。
2.根据计算得到的身高差,选择数据集中距离测试记录最近的 k 个元组,并将其存储在 nearestNeighbors 列表中。

//前 k 个人加入到 nearestNeighbors 列表中,以便后续的分类过程中使用。
 List<Person> nearestNeighbors = new ArrayList<>();
        for (int i=0;i<person.size();i++){
   
   
            Person pers=person.get(i);
            Double difference= pers.height-unknownPerson.height;
            // 使用 DecimalFormat 进行舍入保留两位小数
            DecimalFormat df = new DecimalFormat("#.##");
            pers.heightDifference = Double.parseDouble(df
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值