`
zy3381
  • 浏览: 157660 次
  • 性别: 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,全称为K-Nearest Neighbors,是机器学习领域一种简单且直观的监督学习算法,主要用于分类任务。这个算法的基本思想是“物以类聚”,即一个样本的类别可以由其最近邻的K个样本的类别决定。在KNN算法中,K是一个...

    KNN分类算法例子.zip

    KNN,全称为K-最近邻(K-Nearest Neighbors)算法,是一种基于实例的...总结来说,KNN分类算法是一种简单而有效的机器学习方法,虽然计算量较大,但在适当的数据预处理和优化策略下,仍能在许多场景中发挥重要作用。

    基于python实现KNN分类算法

    KNN,全称为K-Nearest Neighbors,是一种非参数监督学习算法,常用于分类和回归问题。在本文中,我们将重点关注KNN在分类问题上的应用,特别是在Python环境下的实现。 KNN算法的核心思想是“近朱者赤,近墨者黑”,...

    KNN算法 C#程序

    KNN,全称为K-最近邻(K-Nearest Neighbors)算法,是一种基于实例的学习方法,也是非参数监督学习算法的一种。在机器学习领域,KNN被广泛应用于分类和回归问题,尤其在处理小数据集时表现出较高的准确性和有效性。 ...

    KNN疾病预测算法Demo

    KNN(K-Nearest Neighbors)算法是一种监督学习方法,广泛应用于分类和回归问题,尤其在数据挖掘领域。这个“KNN疾病预测算法Demo”是基于Python编程环境的一个实例,它展示了如何运用KNN算法来预测疾病。下面将详细...

    knn.zip_knn算法_分类算法

    KNN,全称K-Nearest Neighbors,是机器学习领域中最基础的分类算法之一。它的核心思想是“物以类聚,人以群分”,即一个样本点的类别由其最近邻点的类别决定。KNN算法在处理分类问题时具有简单、直观的优点,尤其...

    KNN.rar_KNN 实例_KNN实例_knn 分类例子_knn做分类实例_最邻近

    `TNNC3.m` 是一个MATLAB脚本文件,很可能包含了KNN分类器的实现代码。在MATLAB中,我们可以利用`knntrain`和`knnclassify`函数来构建和执行KNN模型。`knntrain`用于训练模型,将数据集分为训练集和测试集,`...

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

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

    KNN算法实现分类问题(JAVA)实现

    这个实验项目提供了一个基础的KNN分类器的实现,通过对数据的读取、距离计算、最近邻选择和类别投票,展示了KNN算法的完整流程。通过阅读和理解这段代码,开发者可以更好地掌握KNN算法的原理,并能在此基础上进行...

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

    标题中的“基于KNN分类器的ocr(数字识别)C++源代码”指的是使用K-Nearest Neighbor(KNN)算法进行光学字符识别(Optical Character Recognition, OCR)的C++程序。OCR技术主要用于将图像中的字符转换为可编辑的文本...

    KNN算法实验报告【Java实现】.doc

    KNN算法是机器学习领域中一种常用的分类算法,它的主要思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法不仅可以用于分类,还...

    KNN算法C#例程

    3. KNN分类器:核心算法实现,包括寻找最近邻、计算类别概率并进行预测。 4. 主程序:调用上述模块,进行模型训练和测试数据的预测,可能还包括结果可视化。 为了评估算法性能,可以使用交叉验证、混淆矩阵或ROC...

    kNN分类器和两个实例-Python

    kNN(K-Nearest Neighbors)分类器是机器学习领域中最基础且广泛应用的算法之一。这个算法基于“近朱者赤,近墨者黑”的原则,即将未知类别的样本点归类到与其最近的k个已知类别样本点中的多数类别。在Python中,...

    stm32单片机knn算法手写数字识别

    接着,编写C或C++代码实现KNN算法的核心逻辑,包括计算距离、选择最近邻和确定分类等步骤。由于STM32的计算能力有限,可能需要优化算法,比如使用固定点数学运算来减少浮点计算的开销。 4. **串口通信** STM32与...

    knn算法识别mnist图片-python3

    接下来,我们可以创建一个KNN分类器,这里我们使用`sklearn.neighbors.KNeighborsClassifier`,并设置K值为3,即最近的三个邻居: ```python from sklearn.neighbors import KNeighborsClassifier knn = ...

    KNN算法示例

    - KNN分类:根据计算出的距离,找到K个最近的邻居,并进行分类决策。 - 结果评估:使用交叉验证或其他方法评估模型的性能。 **文档内容** Homework#3.pdf 可能包含以下内容: 1. 算法介绍:详细解释KNN算法的背景...

    Python3实现KNN的三个例子(包含数据集),水果分类,识别手写数字,找相似的朋友

    总结来说,KNN算法在Python3中有着广泛的应用,从简单的水果分类到复杂的图像识别,再到个性化推荐系统。它依赖于距离度量和局部结构,对数据的预处理和特征选择至关重要。理解并掌握KNN,对于理解和实践机器学习...

    机器学习十大算法:kNN

    2. 探索不同的距离度量方法(如欧氏距离、曼哈顿距离)对kNN分类性能的影响。 3. 实验不同k值的选择对模型准确率的影响。 4. 设计一个实验来评估kNN算法在不平衡数据集上的表现,并提出解决方案。 #### 六、致谢及...

    KNN算法的Python实现

    KNN(K-Nearest Neighbors)算法是一种监督学习方法,广泛应用于分类和回归问题。在机器学习领域,KNN以其简单易懂和强大的泛化能力而受到关注。本篇文章将详细探讨KNN算法的原理、Python实现以及如何处理和应用测试...

Global site tag (gtag.js) - Google Analytics