• 大小: 1.05MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-30
  • 语言: Java
  • 标签: knn,分类  

资源简介

这个是我实验课的作业,Java实现knn算法,对网上需手动输入数据的算法进行了一些改进,注释详细,数据是文件夹中的txt文件,读者可以自己更换成自己的数据。

资源截图

代码片段和文件信息

package KNN;  
import java.util.ArrayList;  
import java.util.Comparator;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
import java.util.PriorityQueue; 
/** 
 *..........KNN算法类..........
 */  
public class KNN {
/** 
     *..........计算测试元组与训练元组之前的距离.......... 
     */  
    public double distance(List d1 List d2) {//d1:测试元祖;d2:训练元祖  
        double distance = 0.00;  
        for (int i = 0; i < d1.size(); i++) {  
            distance += (d1.get(i) - d2.get(i)) * (d1.get(i) - d2.get(i));//欧几里得距离平方  
        }  
        return distance;//返回距离值  
    }  
    /** 
     * ..........设置优先级队列的比较函数..........
     */  
    private Comparator comparator = new Comparator() {  
        public int compare(KNNNode k1 KNNNode k2) {  
            if (k1.getDistance() >= k2.getDistance()) {  
                return 1;  
            } else {  
                return 0;  
            }
        }  
    };//此处有逗号,没有会出错
    /** 
     *..........获取K个不同的随机数.......... 
     */  
    public List getRandKNum(int k int max) {//k:随机数的个数;max:随机数最大的范围;  
        List randNum = new ArrayList(k);  
        for (int i = 0; i < k; i++) {  
            int temp = (int) (Math.random() * max);  
            if (!randNum.contains(temp)) {  
                randNum.add(temp);  
            } else {  
                i--;  
            }  
        }  
        return randNum;//返回生成的随机数数组  
    }
    /** 
     *..........获取所得到的k个最近邻元组的多数类.......... 
     */  
    private String getMostClass( PriorityQueue pq) {//pq:存储k个最近近邻元组的优先级队列  
        Map classCount = new HashMap();  
        for (int i = 0; i < pq.size(); i++) {  
            KNNNode node = pq.remove();  
            String c = node.getC();//获取节点类型  
            if (classCount.containsKey(c)) {//节点类型已存在 ,在之前基础上计数加1
                classCount.put(c classCount.get(c) + 1);  
            } else { //节点类型还未存在 ,计数为1
                classCount.put(c 1);  
            }  
        }  
        int maxIndex = -1;//类别出现最多的  
        int maxCount = 0;  
        object[] classes = classCount.keySet().toArray();  
        for (int i = 0; i < classes.length; i++) {  
            if (classCount.get(classes[i]) > maxCount) {  
                maxIndex = i;  
                maxCount = classCount.get(classes[i]);  
            }  
        }  
        return classes[maxIndex].toString();//返回多数类的名称  
    }  
    /** 
     *..........执行KNN算法,获取测试元组的类别.......... 
     */  
    public String knn(List> datas List testData int k) {//datas:训练数据集;testData:测试元组;k:设定的K值  
     PriorityQueue pq = new  PriorityQueue(k comparator);  
        List randNum = getRandKNum(k datas.size());//取k个不同随机数  
        for (int i = 0; i < k; i++) {  
            int index = randNum.get(i);//获取随机数组里的数  
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-12-13 14:28  TestKNN\
     文件         301  2015-11-19 17:01  TestKNN\.classpath
     文件         383  2015-11-19 17:01  TestKNN\.project
     目录           0  2015-12-13 14:28  TestKNN\.settings\
     文件         598  2015-11-19 17:01  TestKNN\.settings\org.eclipse.jdt.core.prefs
     文件     1388417  2015-11-24 18:48  TestKNN\AfterPreCorrected2.txt
     文件    65652559  2015-11-24 15:39  TestKNN\AfterPreData.txt
     目录           0  2015-12-13 14:28  TestKNN\bin\
     目录           0  2015-12-13 14:28  TestKNN\bin\KNN\
     文件         838  2015-11-24 23:50  TestKNN\bin\KNN\KNN$1.class
     文件        4097  2015-11-24 23:50  TestKNN\bin\KNN\KNN.class
     文件         996  2015-11-24 22:55  TestKNN\bin\KNN\KNNNode.class
     文件        4395  2015-11-25 14:50  TestKNN\bin\KNN\TestKNN.class
     目录           0  2015-12-13 14:28  TestKNN\bin\util\
     文件        2658  2015-11-24 10:19  TestKNN\bin\util\DecimalCalculate.class
     目录           0  2015-12-13 14:28  TestKNN\src\
     目录           0  2015-12-13 14:28  TestKNN\src\KNN\
     文件        4094  2015-11-24 23:50  TestKNN\src\KNN\KNN.java
     文件         948  2015-11-24 22:55  TestKNN\src\KNN\KNNNode.java
     文件        4870  2015-11-25 14:50  TestKNN\src\KNN\TestKNN.java
     目录           0  2015-12-13 14:28  TestKNN\src\util\
     文件        4653  2015-11-24 10:19  TestKNN\src\util\DecimalCalculate.java

评论

共有 条评论

相关资源