knn算法java实例
时间: 2024-09-19 21:11:29 浏览: 38
KNN (K-Nearest Neighbors) 算法是一种基于实例的学习方法,在Java中实现KNN的主要步骤包括数据预处理、计算距离、选择邻居和预测分类。以下是简单的Java示例:
```java
import java.util.*;
class KNN {
private int k;
private List<Point> dataset; // 假设Point类有x和y坐标属性
public KNN(int k) {
this.k = k;
}
// 计算两点之间的欧氏距离
private double distance(Point p1, Point p2) {
double sum = 0;
for (int i = 0; i < p1.getDimensions(); i++) {
sum += Math.pow(p1.getX(i) - p2.getX(i), 2);
}
return Math.sqrt(sum);
}
// 预测给定点的类别
public String predict(Point testPoint) {
Map<String, Double> distancesMap = new HashMap<>();
for (Point point : dataset) {
if (!point.equals(testPoint)) {
distancesMap.put(point.getClassification(), distance(testPoint, point));
}
}
List<Map.Entry<String, Double>> sortedList = new ArrayList<>(distancesMap.entrySet());
Collections.sort(sortedList, (a, b) -> a.getValue().compareTo(b.getValue()));
Set<String> topKClasses = new HashSet<>();
for (int i = 0; i < k && i < sortedList.size(); i++) {
topKClasses.add(sortedList.get(i).getKey());
}
// 如果只有一个类别,直接返回;如果有多个类别,则根据多数原则返回最常见的类别
return Collections.max(topKClasses, Comparator.comparingInt(Map::size)).orElse("Undecided");
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
// 初始化数据集...
KNN knn = new KNN(3);
Point testPoint = ...; // 要预测的测试样本
System.out.println("Predicted class: " + knn.predict(testPoint));
}
}
```
这个例子中,我们首先创建了一个`KNN`类,其中包含了数据集和k值,并实现了计算距离以及基于距离预测类别的方法。在主函数里,你需要提供一个具体的测试点来进行预测。
阅读全文