栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现的KNN算法示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现的KNN算法示例

本文实例讲述了Java实现的KNN算法。分享给大家供大家参考,具体如下:

提起KNN算法大家应该都不会陌生,对于数据挖掘来说算是十大经典算法之一。

算法的思想是:对于训练数据集中已经归类的分组,来对于未知的数据进行分组归类。其中是根据该未知点与其训练数据中的点计算距离,求出距离最短的点,并将其归入该点的那一类。

看看算法的工程吧:

1. 准备数据,对数据进行预处理
2. 选用合适的数据结构存储训练数据和测试元组
3. 设定参数,如k
4.维护一个大小为k的的按距离由大到小的优先级队列,用于存储最近邻训练元组。随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级队列
5. 遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距离L 与优先级队列中的最大距离Lmax
6. 进行比较。若L>=Lmax,则舍弃该元组,遍历下一个元组。若L < Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队                  列。
7. 遍历完毕,计算优先级队列中k 个元组的多数类,并将其作为测试元组的类别。
8. 测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k 值。

根据算法的过程我们进行java语言实现:

package KNN;

public class PointBean {
int x;
int y;
public int getX() {
  return x;
}
public void setX(int x) {
  this.x = x;
}
public int getY() {
  return y;
}
public void setY(int y) {
  this.y = y;
}
public PointBean(int x, int y) {
  super();
  this.x = x;
  this.y = y;
}
public PointBean() {
  super();
}
@Override
public String toString() {
  return "PointBean [x=" + x + ", y=" + y + "]";
}
}

KNN算法

package KNN;
import java.util.ArrayList;

public class KnnMain {
  public double getPointLength(ArrayList list,PointBean bb){
    int b_x=bb.getX();
    int b_y=bb.getY();
    double temp=(b_x -list.get(0).getX())*(b_x -list.get(0).getX())+
 (b_y -list.get(0).getY())*(b_y -list.get(0).getY());
    // 找出最小的距离
    for(int i=1;i list1,ArrayList list2,
      ArrayList list3,PointBean bb){
    double A=getPointLength(list1,bb);
    double B=getPointLength(list2,bb);
    double C=getPointLength(list3,bb);
    //做出比较
    if(A>B){
      if(B>C){
 System.out.println("这个点:"+bb.getX()+" , "+bb.getY()+" " +"属于C");
      }else {
 System.out.println("这个点:"+bb.getX()+" , "+bb.getY()+" " +"属于B");
      }
    }else {
      if(A>C){
 System.out.println("这个点:"+bb.getX()+" , "+bb.getY()+" " +"属于C");
      }else {
 System.out.println("这个点:"+bb.getX()+" , "+bb.getY()+" " +"属于A");
      }
    }
  }
}

主函数

package KNN;
import java.util.ArrayList;

public class TestJava {
  static ArrayList< PointBean> listA;
  static ArrayList< PointBean> listB;
  static ArrayList< PointBean> listC;
  static ArrayList< PointBean> listD;
  public static void main(String[] args) {
    //创佳Arraylist
    listA=new ArrayList();
    listB=new ArrayList();
    listC=new ArrayList();
    listD=new ArrayList();
    //写入数据
    setDate();
    getTestResult();
  }
  
  private static void getTestResult() {
    //创建对象
    KnnMain km=new KnnMain();
    for(int i=0;i

测试的结果:

这个点:3 , 1 属于A
这个点:3 , 5 属于B
这个点:0 , 0 属于A
这个点:5 , 1 属于C

到此简单的KNN算法已经实现对于未知点的划分,有助于大家对于KNN算法的理解。对于改进KNN的一些算法JAVA实现会在后面进行贴出。共同学习共同进步!

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/140643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号