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

最低0.47元/天 解锁文章
890

被折叠的 条评论
为什么被折叠?



