`
zy3381
  • 浏览: 156010 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

KNN分类算法例子

阅读更多
KNN算法的一个简单例子,有注释


Compute.java

public class Compute {
	
	public float integrate(float[][] train, String[] flag, float[][] test, String[] flagOrigin, int k, String[] tag)
	{
		float[] distance;
		int[] index;
		String ans = null;
		int count = 0;
		System.out.println("Testing...");
		for(int i=0; i<test.length; i++)
		{
			//求出训练集到test[i]的距离向量
			distance = getDistance(train, test[i]);
			//对这个距离向量进行排序
			index = sort(distance);
			//
			ans = getAnswer(index, k, flag, tag);
			System.out.println("The class predicted is "+ans + "\t" + "and the class priginal is " + flagOrigin[i]);
			if(!ans.equals(flagOrigin[i]))
			{
				count++;
			}
		}
		return (float)count/test.length;
	}

	/**
	 * 计算训练集中所有点到测试点的距离
	 * @param train
	 * @param test
	 * @return
	 */
	public float[] getDistance(float[][] train, float[] test)
	{
		int row = train.length;		//训练集长度
		int col = train[0].length;	//数据维度
		float[] distance = new float[row];
		for(int i=0; i<row; i++)
		{
			double temp = 0;
			for(int j=0; j<col; j++)
			{
				temp += Math.pow((test[j]-train[i][j]),2);
			}
			distance[i] = (float)Math.sqrt(temp);
		}
		return distance;
	}
	
	/**
	 * 排序数组,返回下标数组
	 * @param dis
	 * @return
	 */
	public int[] sort(float[] dis)
	{
		 
		int length = dis.length ;
		int[] index = new int[length] ; //记录排序后对应的下标
		for(int i=0;i<length;i++)
		{
			index[i] = i ;
		}
		for(int i=0;i<length;i++)
		{
			for(int j=i;j<length;j++)
			{
				if (dis[i]>dis[j])
				{
					float temp ;
					temp = dis[i];
					dis[i] = dis[j] ;
					dis[j] = temp ;
					
					int t ;
					t = index[i] ;
					index[i] = index[j] ;
					index[j] = t ;
				}
			}
		}
		return index ;
	}
	
	/**
	 * 统计距离最近的前k个训练集的类别分布,返回类别数最高的作为判定的类别
	 * @param index 排序后的距离数组下标
	 * @param k
	 * @param flag	训练集所属分类数组
	 * @param tag	类别数组
	 * @return
	 */
	public String getAnswer(int[] index, int k, String[] flag, String[] tag)
	{
		//统计每个类别的数量
		int[] count = new int[tag.length];
		//取距离最近的前k个
		for(int i=0; i<k; i++)
		{
			for(int j=0; j<tag.length; j++)
			{
				if(flag[index[i]].equals(tag[j]))
				{
					count[j]++;
				}
			}
		}
		//获得统计数量最大的类别的下标
		int ind = max(count);
		//返回这个类别
		return tag[ind];
	}
	
	/**
	 * 找出数组中最大值的下标
	 * @param count
	 * @return
	 */
	public int max(int[] count)
	{
		int max = count[0];
		int index = 0;
		for(int i=1; i<count.length; i++)
		{
			if(max<count[i])
			{
				max = count[i];
				index = i;
			}
		}
		return index;
	}
}





knn.java


public class Knn {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Compute com = new Compute();
		//训练集,长度18
		float[][] train = {
							{60,18.4f},
							{85.5f,16.8f},
							{64.5f,21.6f},
							{61.5f,20.8f},
							{87,23.6f},
							{82.8f,22.4f},
							{69,20},
							{93,20.8f},
							{51,22},
							{75,19.6f},
							{64.8f,17.2f},
							{43.2f,20.4f},
							{84,17.6f},
							{49.2f,20.4f},
							{47.4f,16.4f},
							{43,18.8f},
							{51,14},
							{63,14.8f},
							};
		//训练集的类别归属,长度18
		String[] flag={"1","1","1","1","1","1","1","1","1",
				"2","2","2","2","2","2","2","2","2"} ;
		
		//测试数据集,长度6
		float[][] test = {
							{32,19.2f},
							{108,17.6f},
							{81,20},
							{52.8f,20.8f},
							{59.4f,16},
							{66,18.4f}};
		//测试数据集的原本归属
		String[] flagOrigin = {"1","1","1","2","2","2"};
		//类别
		String[] tag = {"1","2"};
		
		int k = 13;
		float errorRate = com.integrate(train, flag, test, flagOrigin, k, tag);
		System.out.println("correct rate is "+ (1-errorRate));
	}
	
	

}











分享到:
评论

相关推荐

    KNN分类算法例子KNN分类算法例子

    KNN分类算法例子KNN分类算法例子

    KNN分类算法例子.zip

    KNN分类算法例子.zip

    KNN算法 C#程序

    KNN算法 C#程序

    KNN算法基于Hadoop平台实现的的MapReduce实现+源代码+文档说明

    - 该项目实现了KNN算法在Hadoop平台基于***欧拉距离***,***加权欧拉距离***,***高斯函数***的MapReduce实现。 - 特色或创意:在网上KNN实现的例子上添加了基于***欧拉距离***,***加权欧拉距离***,***高斯函数***...

    基于KNN分类器的ocr(数字识别)C++源代码,参考的opencv sample

    使用opencv库, 基于KNN分类器的ocr(数字识别),参考了opencv2.0的例子,进行了部分改编,C++的实现,欢迎下载!

    基于KNN实现图像分类

    1. KNN KNN被翻译为最近邻算法,顾名思义,找到最近的k个邻居,在前k个最近...通过上述这个例子,我们可以简单总结出KNN算法的计算逻辑。 1)给定测试对象,计算它与训练集中每个对象的距离。 2)圈定距离最近的k个训

    KNN算法实验报告.doc

    KNN算法实验报告 一 试验原理 K最近邻(k- NearestNeighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学 习算法之一。 该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近...

    ruby-knn:用Ruby编写的简单kNN分类器

    用Ruby编写的简单kNN分类器 用法 将宝石捆绑在您的项目中,然后按照以下说明进行操作。 # Gemfile gem 'knn' , git : 'git@github.com:jonmidhir/ruby-knn.git' # Elsewhere require 'knn' 或者您可以通过克隆此...

    深度学习之图像分类———–K最邻近算法(KNN)

    邻近算法,或者说是K最邻近算法,是一个相对简单的多分类算法,其基本工作原理为: 首先我们存在一个训练集,训练集中的每个图片都存在标签(已知图片属于哪一类).对于我们输入的没有标签的数据,我们将新数据中的每个...

    大数据概论课程设计-基于 KNN 与 MapReduce 的电影网站用户性别预测(附课程设计报告)

    3.掌握以 MapReduce 编程实现 KNN 分类器评价 三、项目分析 什么有个性化的电影推荐服务?举个最简单的例子,不同性别的人偏爱电影的类型会有所不同,如大部分男生可能比较喜欢看警匪类型或动作类型的电影,而大部分...

    Machine-Learning-Tasks:Python中KNN算法、COS相似度、Logistic回归的简单实现

    机器学习项目任务Python中KNN算法、COS相似度、... 8.7分类 : 使用 k-最近邻算法(KNN)通过提出一些问题将电影分类为它的类型:例子 : Please Answer this Questions :have you seen any kisses in this film ?yeshav

    深入理解大数据源码

    里面包含许多经典例子的代码,java实现,易读性强,包含MapReduce的K-Means聚类算法、KNN最近邻分类算法、朴素贝叶斯分类算法、决策树分类算法等,还有基于MapReduce的搜索引擎算法、大规模基因序列化比对算法、重复...

    Python实现KNN(K-近邻)算法的示例代码

    KNN(K-最近邻)算法是相对比较简单的机器学习算法之一,它主要用于对事物进行分类。用比较官方的话来说就是:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例, 这K个实例的多数...

    tensorflow实现KNN识别MNIST

    KNN的最核心就是距离度量方式,官方例程给出的是L1范数的例子,我这里改成了L2范数,也就是我们常说的欧几里得距离度量,另外,虽然是叫KNN,意思是选取k个最接近的元素来投票产生分类,但是这里只是用了最近的那个...

    《深入理解大数据》一书的源代码

    《深入理解大数据》一书的源代码,里面包含许多经典例子的代码,java实现,易读性强,包含MapReduce的K-Means聚类算法、KNN最近邻分类算法、朴素贝叶斯分类算法、决策树分类算法等,还有基于MapReduce的搜索引擎算法...

    Machine-Learning-in-Action:《机器学习在行动》中的演示

    Machine-Learning-in-Action 这里使用python3语言实现《机器学习实战》的算法 ch02 : knn    kNN.py :knn算法的实现    kdTree.py :kd树以及kd搜索树算法的实现 ...   小例子 :垃圾邮件分类

    machine-learning

    邻近算法(KNN,K-...KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 下面通过一个简单的例子说明一下:如下图,绿色圆要

    Python K最近邻从原理到实现的方法

    引文:决策树和基于规则的分类器都是积极学习方法(eager learner)的例子,因为一旦训练数据可用,他们就开始学习从输入属性到类标号的映射模型。一个相反的策略是推迟对训练数据的建模,直到需要分类测试样例时再...

    机器学习.zip

    常见的监督学习算法有**k-近邻算法(KNN)、决策树、朴素贝叶斯(NB)、Logistic回归、支持向量机(SVM)、AdaBoost算法、线性回归(LR)、局部加权线性回归(LWLR)、收缩和树回归等。 - 非监督学习算法 - 一个...

Global site tag (gtag.js) - Google Analytics