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,全称为K-Nearest Neighbors,是机器学习领域一种简单且直观的监督学习算法,主要用于分类任务。这个算法的基本思想是“物以类聚”,即一个样本的类别可以由其最近邻的K个样本的类别决定。在KNN算法中,K是一个...
KNN,全称为K-最近邻(K-Nearest Neighbors)算法,是一种基于实例的...总结来说,KNN分类算法是一种简单而有效的机器学习方法,虽然计算量较大,但在适当的数据预处理和优化策略下,仍能在许多场景中发挥重要作用。
KNN,全称为K-Nearest Neighbors,是一种非参数监督学习算法,常用于分类和回归问题。在本文中,我们将重点关注KNN在分类问题上的应用,特别是在Python环境下的实现。 KNN算法的核心思想是“近朱者赤,近墨者黑”,...
KNN,全称为K-最近邻(K-Nearest Neighbors)算法,是一种基于实例的学习方法,也是非参数监督学习算法的一种。在机器学习领域,KNN被广泛应用于分类和回归问题,尤其在处理小数据集时表现出较高的准确性和有效性。 ...
KNN(K-Nearest Neighbors)算法是一种监督学习方法,广泛应用于分类和回归问题,尤其在数据挖掘领域。这个“KNN疾病预测算法Demo”是基于Python编程环境的一个实例,它展示了如何运用KNN算法来预测疾病。下面将详细...
KNN,全称K-Nearest Neighbors,是机器学习领域中最基础的分类算法之一。它的核心思想是“物以类聚,人以群分”,即一个样本点的类别由其最近邻点的类别决定。KNN算法在处理分类问题时具有简单、直观的优点,尤其...
`TNNC3.m` 是一个MATLAB脚本文件,很可能包含了KNN分类器的实现代码。在MATLAB中,我们可以利用`knntrain`和`knnclassify`函数来构建和执行KNN模型。`knntrain`用于训练模型,将数据集分为训练集和测试集,`...
- 该项目实现了KNN算法在Hadoop平台基于***欧拉距离***,***加权欧拉距离***,***高斯函数***的MapReduce实现。 - 特色或创意:在网上KNN实现的例子上添加了基于***欧拉距离***,***加权欧拉距离***,***高斯函数***...
这个实验项目提供了一个基础的KNN分类器的实现,通过对数据的读取、距离计算、最近邻选择和类别投票,展示了KNN算法的完整流程。通过阅读和理解这段代码,开发者可以更好地掌握KNN算法的原理,并能在此基础上进行...
标题中的“基于KNN分类器的ocr(数字识别)C++源代码”指的是使用K-Nearest Neighbor(KNN)算法进行光学字符识别(Optical Character Recognition, OCR)的C++程序。OCR技术主要用于将图像中的字符转换为可编辑的文本...
KNN算法是机器学习领域中一种常用的分类算法,它的主要思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法不仅可以用于分类,还...
3. KNN分类器:核心算法实现,包括寻找最近邻、计算类别概率并进行预测。 4. 主程序:调用上述模块,进行模型训练和测试数据的预测,可能还包括结果可视化。 为了评估算法性能,可以使用交叉验证、混淆矩阵或ROC...
kNN(K-Nearest Neighbors)分类器是机器学习领域中最基础且广泛应用的算法之一。这个算法基于“近朱者赤,近墨者黑”的原则,即将未知类别的样本点归类到与其最近的k个已知类别样本点中的多数类别。在Python中,...
接着,编写C或C++代码实现KNN算法的核心逻辑,包括计算距离、选择最近邻和确定分类等步骤。由于STM32的计算能力有限,可能需要优化算法,比如使用固定点数学运算来减少浮点计算的开销。 4. **串口通信** STM32与...
接下来,我们可以创建一个KNN分类器,这里我们使用`sklearn.neighbors.KNeighborsClassifier`,并设置K值为3,即最近的三个邻居: ```python from sklearn.neighbors import KNeighborsClassifier knn = ...
- KNN分类:根据计算出的距离,找到K个最近的邻居,并进行分类决策。 - 结果评估:使用交叉验证或其他方法评估模型的性能。 **文档内容** Homework#3.pdf 可能包含以下内容: 1. 算法介绍:详细解释KNN算法的背景...
总结来说,KNN算法在Python3中有着广泛的应用,从简单的水果分类到复杂的图像识别,再到个性化推荐系统。它依赖于距离度量和局部结构,对数据的预处理和特征选择至关重要。理解并掌握KNN,对于理解和实践机器学习...
2. 探索不同的距离度量方法(如欧氏距离、曼哈顿距离)对kNN分类性能的影响。 3. 实验不同k值的选择对模型准确率的影响。 4. 设计一个实验来评估kNN算法在不平衡数据集上的表现,并提出解决方案。 #### 六、致谢及...
KNN(K-Nearest Neighbors)算法是一种监督学习方法,广泛应用于分类和回归问题。在机器学习领域,KNN以其简单易懂和强大的泛化能力而受到关注。本篇文章将详细探讨KNN算法的原理、Python实现以及如何处理和应用测试...