文章链接:日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客

day52 kNN 分类器 (续)

52.1 重新实现 computeNearests, 仅需要扫描一遍训练集, 即可获得 k 个邻居

分析:

扫描一次训练集,当时我第一想法是先扫描训练集,计算测试点到训练集的距离并用距离数组进行存储,在对距离数组进行插入排序获取前k个数据,但是这样并不满足时间复杂度的要求,后面对其进行改进,在计算距离的同时对数据进行排序,这样就满足要求了(因为这个方法返回的邻居,这里借助了一个数组来存储训练集的索引并与距离数组一一对应)。经过测试,符合要求。

当时想着不用两个数组来做,用 List<Map<Integer,Double>> distance = new ArrayList<>(),键值对的形式,但是发现这个在进行交换数据比较麻烦,故放弃了。

如下代码:

public int[] computeNearestsNew(int paraCurrent) {int[] resultNearests = new int[numNeighbors];int[] trainingIndex = new int[trainingSet.length];double[] trainingDistance = new double[trainingSet.length];int j;double tempData;//在计算距离的同时进行插入排序for (int i = 0; i < trainingSet.length; i++) {trainingDistance[i]  = distance(paraCurrent, trainingSet[i]);tempData = trainingDistance[i];for (j = i-1; j >= 0 && trainingDistance[j] > tempData; j--) {trainingDistance[j+1] = trainingDistance[j];trainingIndex[j+1] = trainingIndex[j];}trainingDistance[j+1] = tempData;trainingIndex[j+1] = i;}//获取前面k个邻居for (int i = 0; i < numNeighbors; i++) {resultNearests[i] = trainingSet[trainingIndex[i]];}System.out.println("The nearest of " + paraCurrent + " are: " + Arrays.toString(resultNearests));return resultNearests;}

运行结果:

The nearest of 46 are: [19, 48, 4, 27, 10, 0, 17]
The nearest of 50 are: [52, 76, 58, 75, 77, 51, 56]
The nearest of 128 are: [132, 104, 103, 111, 112, 147, 140]
The nearest of 1 are: [45, 12, 34, 37, 25, 30, 35]
The nearest of 54 are: [58, 75, 76, 74, 51, 91, 72]
The nearest of 44 are: [19, 43, 48, 26, 24, 27, 23]
The nearest of 21 are: [19, 17, 4, 48, 0, 27, 43]
The nearest of 53 are: [80, 69, 92, 90, 59, 82, 99]
The nearest of 40 are: [17, 0, 4, 7, 49, 39, 27]
The nearest of 16 are: [10, 48, 33, 19, 36, 14, 18]
The nearest of 89 are: [69, 80, 92, 99, 59, 82, 90]
The nearest of 5 are: [18, 10, 48, 19, 33, 27, 31]
The nearest of 116 are: [103, 147, 111, 112, 132, 104, 124]
The nearest of 88 are: [96, 95, 99, 82, 66, 55, 92]
The nearest of 81 are: [80, 69, 79, 92, 82, 64, 62]
The nearest of 144 are: [140, 143, 124, 104, 100, 112, 115]
The nearest of 101 are: [142, 113, 121, 83, 127, 114, 123]
The nearest of 122 are: [105, 135, 125, 117, 102, 131, 129]
The nearest of 9 are: [34, 37, 30, 12, 25, 49, 29]
The nearest of 126 are: [123, 127, 146, 83, 133, 72, 78]
The nearest of 136 are: [148, 115, 100, 140, 124, 104, 143]
The nearest of 119 are: [72, 83, 68, 146, 113, 123, 133]
The nearest of 32 are: [33, 19, 48, 10, 4, 27, 0]
The nearest of 67 are: [92, 82, 99, 69, 95, 96, 71]
The nearest of 6 are: [47, 2, 42, 29, 3, 30, 7]
The nearest of 106 are: [84, 59, 90, 66, 121, 55, 113]
The nearest of 141 are: [145, 139, 112, 147, 115, 140, 77]
The nearest of 85 are: [56, 51, 91, 78, 66, 127, 97]
The nearest of 61 are: [96, 78, 95, 99, 97, 71, 66]
The nearest of 28 are: [27, 0, 39, 17, 7, 49, 4]
The nearest of 118 are: [105, 135, 117, 102, 125, 131, 109]
The nearest of 86 are: [52, 58, 75, 76, 77, 51, 56]
The nearest of 110 are: [147, 115, 77, 145, 139, 127, 112]
The nearest of 149 are: [127, 142, 83, 121, 123, 133, 113]
The nearest of 138 are: [127, 123, 78, 91, 83, 56, 142]
The nearest of 63 are: [91, 73, 78, 97, 127, 55, 133]
The nearest of 70 are: [127, 56, 91, 78, 121, 66, 142]
The nearest of 130 are: [102, 125, 129, 135, 105, 108, 143]
The nearest of 107 are: [125, 105, 102, 129, 135, 143, 108]
The nearest of 120 are: [143, 140, 124, 112, 139, 102, 104]
The nearest of 65 are: [75, 58, 51, 74, 76, 52, 97]
The nearest of 94 are: [99, 96, 90, 92, 55, 95, 82]
The nearest of 13 are: [38, 42, 8, 47, 2, 3, 12]
The nearest of 137 are: [103, 147, 111, 112, 124, 132, 104]
The nearest of 11 are: [29, 7, 26, 24, 30, 49, 39]
The accuracy of the classifier is: 0.9555555555555556

52.2增加 setDistanceMeasure() , setNumNeighors() 方法.

public void setDistanceMeasure(int distanceMeasure) {this.distanceMeasure = distanceMeasure;}    public void setNumNeighbors(int numNeighbors) {this.numNeighbors = numNeighbors;}

总结:

今天结合昨天的内容,对昨天的内容又进行了一遍梳理,更熟悉这个内容了,对computeNearests ()方法进行重写,提高了其运行效率。

心得体会day52(日撸 Java 三百行)相关推荐

  1. 日撸 Java 三百行: DAY1 AND DAY2

    0.前言 由闵帆老师发布的教程:日撸 Java 三百行,有助于培养基本的java程序设计能力与良好的代码规范,同时逐渐深入,能够有助于对数据结构.机器学习相关知识的掌握与理解.我从今日开始,跟随此教程 ...

  2. 日撸 Java 三百行(20 天: 过去10日总结)

    注意:这里是JAVA自学与了解的同步笔记与记录,如有问题欢迎指正说明 目录 · 前言 一.面向对象与面向过程相比, 有哪些优势? 二.比较顺序表和链表的异同 三.分析顺序表和链表的优缺点 四.分析调拭 ...

  3. 日撸java三百行day61-62

    文章目录 说明 Day61 决策树 1.什么是决策树 2.什么是熵 3.什么是信息增益 4.详细例子 1. weather样本 2.第一次决策 3.第二次决策 4.最终决策树 4. 代码理解 4.1 ...

  4. 日撸java三百行day58-59

    文章目录 说明 Day58 符号型数据的 NB 算法 1.基础理论知识 1.1 条件概率 1.2 独立性假设 1.3 Laplacian 平滑 2. 符号型数据的预测算法跟踪 2.1 testNomi ...

  5. 日撸java三百行day63-65

    文章目录 说明 1. Day63-65 AdaBoosting算法 1 AdaBoostin举例 1.1数据样本 1.2 举例过程 2. 理论知识 3. 总结 2. 代码理解 1. WeightedI ...

  6. 日撸 Java 三百行(特殊训练:关键路径)

    日撸 Java 三百行(特殊训练:关键路径) 注意:这里是JAVA自学与了解的同步笔记与记录,如有问题欢迎指正说明 日撸 Java 三百行(特殊训练:关键路径) 前言 一.关于AOE网 (Activi ...

  7. 日撸 Java 三百行day51-53

    文章目录 说明 Day51-52 KNN 分类器 1.KNN 2.代码 1.aff内容解读 2.代码理解 Day53 knn补充 1.加权思路 2.加权代码 3.leave-one-out 测试思路 ...

  8. 日撸 Java 三百行(51-60天,kNN 与 NB)

    目录 总述 01-10天,基本语法 11-20天,线性数据结构 21-30天,树与二叉树 31-40天,图 41-50天,查找与排序 51-60天,kNN 与 NB 61-70天,决策树与集成学习 7 ...

  9. 日撸 Java 三百行: DAY21 二叉树的深度遍历的递归实现

    0.主题 今天实现递归版本的二叉树深度遍历,并实现两个基于此遍历的方法,即求二叉树深度与二叉树结点数. 1.二叉树的深度遍历 深度优先遍历,顾名思义就是一直往深处遍历,直到无路可走再回头换个方向继续往 ...

最新文章

  1. Android中shape的解析
  2. 比较python类的两个instance(对象) 是否相等
  3. ipad Simulator 的home 键的调用
  4. Linux窗口按钮大小,Fitts: 给Ubuntu窗口一个大按钮
  5. [转]:理解 Linux 配置文件
  6. C# 知识点笔记:IEnumerable的使用,利用反射动态调用方法
  7. ubuntu tftp 端口 NFS端口固定与防火墙
  8. Linux x86_64内核中断初始化
  9. 软件测试对计算器的测试,软件测试计算器的测试用例
  10. 如何使用flex布局,实现三个div垂直居中布局
  11. 云渲染和渲染农场有什么区别?看完你就明白了
  12. 电脑老是显示无网络连接到服务器,电脑怎么老弹出无法与服务器建立连接
  13. NYOJ - [第八届河南省程序设计大赛]Distribution(水题)
  14. 如何安装linux安装光盘中的软件包
  15. SQL+Tableau化妆品数据分析
  16. 分布式微服务学习总结——分布式微服务概述
  17. 程序员带你一步步分析AI如何玩Flappy Bird
  18. fliecmp库:Python比较文件操作
  19. 采用灰度分组统计方法实现图像中值滤波
  20. python播放音频文件_详解使用pygame播放一段MP3音频文件

热门文章

  1. 努力并非是人生的难题,如何做选择才是人类社会永远的课题!
  2. uefi模式装gho格式系统失败的原因
  3. windows下用cmd切换目录
  4. 使用eNSP搭建一个简单的网络
  5. 机器人编程软件semia_AlphaRobot2S(Alpha2机器人PC编程软件)
  6. Python应用之植物大战僵尸2-功夫世界BOSS关卡无限刷金币
  7. uboot的环境变量
  8. 微信小程序 lookup 联表查询
  9. 服务器显卡不能显示器,到底有没有关系?显卡与显示器无责任搭配
  10. 网站防御cdn和高防服务器,高防IP和高防CDN哪个防护更好?