K-近邻分类算法KNN
K-近邻(K-Nearest Neighbors, KNN)是一种很好理解的分类算法,简单说来就是从训练样本中找出K个与其最相近的样本,然后看这K个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。
KNN算法的步骤
- 计算已知类别数据集中每个点与当前点的距离;
- 选取与当前点距离最小的K个点;
- 统计前K个点中每个类别的样本出现的频率;
- 返回前K个点出现频率最高的类别作为当前点的预测分类。
OpenCV中使用CvKNearest
- int main()
- {
- float labels[10] = {0,0,0,0,0,1,1,1,1,1};
- Mat labelsMat(10, 1, CV_32FC1, labels);
- cout<<labelsMat<<endl;
- float trainingData[10][2];
- srand(time(0));
- for(int i=0;i<5;i++){
- trainingData[i][0] = rand()%255+1;
- trainingData[i][1] = rand()%255+1;
- trainingData[i+5][0] = rand()%255+255;
- trainingData[i+5][1] = rand()%255+255;
- }
- Mat trainingDataMat(10, 2, CV_32FC1, trainingData);
- cout<<trainingDataMat<<endl;
- CvKNearest knn;
- knn.train(trainingDataMat,labelsMat,Mat(), false, 2 );
- // Data for visual representation
- int width = 512, height = 512;
- Mat image = Mat::zeros(height, width, CV_8UC3);
- Vec3b green(0,255,0), blue (255,0,0);
- for (int i = 0; i < image.rows; ++i){
- for (int j = 0; j < image.cols; ++j){
- const Mat sampleMat = (Mat_<float>(1,2) << i,j);
- Mat response;
- float result = knn.find_nearest(sampleMat,1);
- if (result !=0){
- image.at<Vec3b>(j, i) = green;
- }
- else
- image.at<Vec3b>(j, i) = blue;
- }
- }
- // Show the training data
- for(int i=0;i<5;i++){
- circle( image, Point(trainingData[i][0], trainingData[i][1]),
- 5, Scalar( 0, 0, 0), -1, 8);
- circle( image, Point(trainingData[i+5][0], trainingData[i+5][1]),
- 5, Scalar(255, 255, 255), -1, 8);
- }
- imshow("KNN Simple Example", image); // show it to the user
- waitKey(10000);
- }
使用的是之前BP神经网络中的例子,分类结果如下:
- float CvKNearest::find_nearest(const Mat& samples, int k, Mat* results=0,
- const float** neighbors=0, Mat* neighborResponses=0, Mat* dist=0 )
即,samples为样本数*特征数的浮点矩阵;K为寻找最近点的个数;results与预测结果;neibhbors为k*样本数的指针数组(输入为const,实在不知为何如此设计);neighborResponse为样本数*k的每个样本K个近邻的输出值;dist为样本数*k的每个样本K个近邻的距离。
K-近邻分类算法KNN相关推荐
- 机器学习——K近邻分类算法及python代码实现
<机器学习:公式推导与代码实践>鲁伟著读书笔记. K近邻(K-nearest neighbor,K-NN)算法是一种经典的监督学习的分类方法.K近邻算法是依据新样本与k个与其相邻最近的样本 ...
- 机器学习100天(三十):030 K近邻分类算法-K值的选择
机器学习100天,今天讲的是:K近邻分类算法-K值的选择. <机器学习100天>完整目录:目录 上一节我们讲了 K 折交叉验证的理论,下面我们将 K 折交叉验证算法应用到 K 近邻分类算法 ...
- K近邻分类算法实战教程
K近邻(K-Nearest Neighbor ,简称KNN ) 是有监督非线性.非参数分类算法,非参数表示对数据集及其分布没有任何假设.它是最简单.最常用的分类算法之一,广泛应用于金融.医疗等领域. ...
- knn算法python代码_K-最近邻分类算法(KNN)及python实现
一.引入 问题:确定绿色圆是属于红色三角形.还是蓝色正方形? KNN的思想: 从上图中我们可以看到,图中的数据集是良好的数据,即都打好了label,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆 ...
- Python KNN K近邻分类
Python KNN K近邻分类 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 KNN简介 相关概念见下: 对于给定的观测来 ...
- K近邻模型、KNN算法1-构建预测模型
K近邻模型.KNN算法1-构建预测模型 案例 假设你已经清洗好了一份同类型的商品信息和价格数据,如果给一个同品类全新的商品,你如何给它定价或预测它的价格? 比如,这个商品是红酒.你已经获取到了一批红酒 ...
- python 机器学习——K 近邻分类理论及鸢尾( Iris )数据集实例操作
K 近邻分类理论及鸢尾( Iris )数据集实例操作 一.K 近邻分类理论 二.K 近邻分类实例操作 (1)导入数据 划分训练集测试集 (3)数据标准化 (4)用 K 近邻法建立模型 (5)性能评估 ...
- 分类算法matlab实例,数据挖掘之分类算法---knn算法(有matlab例子)
knn算法(k-Nearest Neighbor algorithm).是一种经典的分类算法.注意,不是聚类算法.所以这种分类算法 必然包括了训练过程. 然而和一般性的分类算法不同,knn算法是一种懒 ...
- 机器学习理论梳理2 : KNN K近邻分类模型
本文主要梳理KNN,K近邻模型的基本原理. 从机器学习的大分类来看,K近邻模型属于监督学习中的一种判别式模型,常用于分类问题.初始的数据集中,包含了已经分类标签好的数据.一句话来说,K近邻模型就是通过 ...
- K近邻法算法(KNN)及其R实现
1. K近邻算法 输入:训练数据集 T={(x1,y1),(x2,y2),⋯,(xN,yN)} T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} 其中, xi∈χ⊆ ...
最新文章
- SMS系列之六:利用SMS实现操作系统的补丁分发
- 共享可写节包含重定位_艾瑞咨询:2020年数说双11电商购物节报告
- asp.net甘特图控件exG2antt介绍及免费下载
- 知识图谱常用指标:MRR、Hits@1、Hits@10、MR
- 8万行的insert数据,Ctrl+c、Ctrl+v后心态崩了(如何在Linux下对MySQL数据库执行sql文件)...
- 数据结构笔记(九)-- 单链队列
- python之os.path.join
- 运动目标跟踪(十六)--OAB,SemiT,BSBT跟踪
- MongoDB是我想要的存储么?
- java socket 读不到数据_Java Socket通信以及可能出现的问题解决
- vb.net 教程 11-1 打印组件 5 PrintPreviewDialog
- Fatal error: Class 'GearmanClient' not found解决方法
- centos 安装 libiconv
- java使用163邮箱完成发送邮件完成注册
- echarts中使用饼状图显示百分比
- 2021年MEMS传感器产业链变化与趋势
- iOS 上传ipa包成功找不到ITMS-90338: Non-public API usage
- phantompdf 下载_英雄联盟手游详细下载方法,附中文翻译!
- 在zabbix中使用使用pg_monz模板日常监控postgresql发生sh: psql: command not found错误
- 【科普】关于操作系统(桌面操作系统/服务器操作系统/嵌入式/移动设备操作系统)基础概念
热门文章
- Android FrameWork学习(二)Android系统源码调试
- 给技术人上的管理课:平衡和集中
- POJ 1321 棋盘问题 题解
- 利用深度学习的点云语义分割(一)
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】
- 获取RadioButton选中的值
- 加强路由器的安全访问控制
- 使用brew安装Logstash(Mac)
- 脑动力:C语言函数速查效率手册(附DVD光盘1张) [平
- Windows下Git上传项目代码记录