OpenCV Machine Learning 之 K最近邻分类器 K-Nearest Neighbors

K-Nearest Neighbors

该算法存储所有的训练样本(已知标签),然后通过分析新给的样本(标签未知)与已知标签的训练样本的相似度,选出其中的K个最相似的训练样本进行投票得到新样本的标签,并计算加权和等。
该方法有时被称为是“learning by example”,因为他总是根据新样本的特征向量与已知标签的样本特征向量的相似度来判断新样本的类别。

CvKNearest

class CvKNearest : public CvStatModel

该类实现了 K-Nearest Neighbors
模型

CvKNearest::CvKNearest

默认构造函数.

C++: CvKNearest::CvKNearest()

带训练数据的构造函数(opencv2.x版本的)

C++: CvKNearest::CvKNearest(constMat& trainData, const Mat& responses, constMat& sampleIdx=Mat(),
bool isRegression=false,int max_k=32 )

带训练数据的构造函数(opencv 1.x版本的)

C++: CvKNearest::CvKNearest(constCvMat* trainData, const CvMat* responses, constCvMat* sampleIdx=0,
boolisRegression=false, int max_k=32 )

查看函数CvKNearest::train()获取参数的详细解释。

CvKNearest::train

调用该函数训练模型.

C++: bool CvKNearest::train(const Mat& trainData, const Mat& responses, const Mat& sampleIdx=Mat(),
bool isRegression=false,int maxK=32, bool updateBase=false )?

C++: bool CvKNearest::train(const CvMat* trainData, const CvMat* responses, const
CvMat* sampleIdx=0, boolis_regression=false, int maxK=32, bool updateBase=false )


 

isRegression – 问题类型: true for 回归问题 and false for 分类问题.

·         maxK –被传递给函数 CvKNearest::find_nearest()的最大邻居的数目.

·         updateBase – 指定模型是被重新训练(update_base=false)

·         还是在原有基础上进行更新 (update_base=true). 在后一种情况下, 参数 maxK 必须不能大于原始值.

该方法用于训练 K-Nearest 模型. 它遵循其父类函数CvStatModel::train() 的一般性约定,并具有下述限制:

l  训练数据集仅支持按行存放,即 CV_ROW_SAMPLE

l  所有输入变量必须是可以排序的.

l  输出变量可以是类别标签,此时(is_regression=false)或者ordered( is_regression=true ).

变量子集(var_idx)和 缺省观测是不被支持的

CvKNearest::find_nearest

找到邻居并预测输入向量的响应

C++: float CvKNearest::find_nearest(const Mat& samples, int k,Mat* results=0,
const float** neighbors=0, Mat*neighborResponses=0,Mat* dist=0 ) const

C++: float CvKNearest::find_nearest(const Mat& samples, int k, Mat& results,Mat& neighborResponses,
Mat& dists) const

C++: float CvKNearest::find_nearest(const CvMat* samples, int k,CvMat* results=0,
const float** neighbors=0, CvMat*neighborResponses=0,CvMat* dist=0 ) const


·         samples – 输入样本,按行存储. 是一个单精度浮点矩阵。大小为:      .

·         k – 使用的最近邻的个数. 必须满足约束条件:  CvKNearest::get_max_k().

·         results – 每一个输入样本的预测结果的向量 (回归问题 或 分类问题). 是一个单精度浮点数向量,包含number_of_samples 个元素.

·         neighbors –可选的输出参数,指向邻居向量的指针,是一个数组:包含 k*samples->rowspointers.

·         neighborResponses – 可选的输出参数,与上面的neighbours参数对应。是一个大小为的单精度浮点矩阵.

·         dist – 可选的输出参数,是输入向量与它的邻居的距离。是一个大小为的单精度浮点数矩阵.

对于每一个输入向量(samples矩阵中的一行), 该方法找到K个最近的邻居. 在回归问题中, 预测的结果是所有邻居响应的加权均值。在分类问题中, 输入项的类别标号由投票法决定.

对于每一个输入向量, 它的邻居按照与自己的距离远近进行了排序.

在C++的实现中 ,可以使用输出指针指向空矩阵,函数会自己分配内存.

如果只有一个输入向量,所有的输出矩阵都是可选的,预测值直接由函数返回。该函数使用TBB库进行了并行运算.

CvKNearest::get_max_k

获取最大邻居的数目,该数目将作为参数传递给函数 CvKNearest::find_nearest().

C++: int CvKNearest::get_max_k() const

CvKNearest::get_var_count?

返回样本的特征数目 (变量数目).

C++: int CvKNearest::get_var_count() const

CvKNearest::get_sample_count

返回训练样本的总数目.

C++: int CvKNearest::get_sample_count() const

CvKNearest::is_regression

返回问题类型: true for回归问题 and false for分类问题.

C++: bool CvKNearest::is_regression() const

OpenCV Machine Learning 之 K最近邻分类器 K-Nearest Neighbors,布布扣,bubuko.com

时间: 2024-10-10 01:32:14

OpenCV Machine Learning 之 K最近邻分类器 K-Nearest Neighbors的相关文章

OpenCV Machine Learning 之 K最近邻分类器的应用 K-Nearest Neighbors

OpenCV Machine Learning 之 K最近邻分类器的应用 下面的程序实现了对高斯分布的点集合进行分类的K最近令分类器 程序运行结果: OpenCV Machine Learning 之 K最近邻分类器的应用 K-Nearest Neighbors,布布扣,bubuko.com

Machine Learning—k-nearest neighbor classification(k近邻分类)

印象笔记同步分享:Machine Learning-k-nearest neighbor classification(k近邻分类)

OpenCV Machine Learning 之正态贝叶斯分类器源代码分析(Normal Bayes Classifier)

1.  CvNormalBayesClassifier的 类 定 义 在ml.hpp中有以下类定义: [cpp] view plaincopyprint? class CV_EXPORTS_W CvNormalBayesClassifier : public CvStatModel { public: CV_WRAP CvNormalBayesClassifier(); virtual ~CvNormalBayesClassifier(); CvNormalBayesClassifier( co

OpenCV Machine Learning Library 机器学习库总体结构探微

原创博客,转载请:http://blog.csdn.net/zhjm07054115/article/details/27577181 OpenCV Machine Learning Library 机器学习库总体结构探微

OpenCV Machine Learning 之 正态贝叶斯分类器 (Normal Bayes Classifier)

OpenCV Machine Learning 之 正态贝叶斯分类器 (Normal Bayes Classifier)

轻松看懂机器学习十大常用算法 (Machine Learning Top 10 Commonly Used Algorithms)

原文出处: 不会停的蜗牛 通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普.以后有时间再对单个算法做深入地解析. 今天的算法如下: 决策树 随机森林算法 逻辑回归 SVM 朴素贝叶斯 K最近邻算法 K均值算法 Adaboost 算法 神经网络 马尔可夫 1. 决策树 根据一些 feature 进行分类,每个节点提一个问题,通过判断,

OpenCV K-d树实现之FLANN (Fast Library for Approximate Nearest Neighbors) 算法实现及解析

k-d树搜索最近点,在opencv中使用FLANN算法,其包含: 1:建树   2.查询 程序见下: #include "kdtree.h" #include <iostream> #include <iomanip> #include "cv.h" #include "highgui.h" #include <fstream> #include "cv.h" #include "

opencv K邻近分类器的使用

下面是手册中给出的K邻近分类器使用的例子,该例子是以CvMat形式实现的.通过下面的例子可以知道如何使用Opencv自带的分类器.矩阵数据如何访问.如何画图.如何使用Opencv的随机数生成函数等内容.在第二个例子中已将这些代码部分做了注释. #include "ml.h" #include "highgui.h" int main( int argc, char** argv ) { const int K = 10; int i, j, k, accuracy;

机器学习 —— 基础整理(三):非参数方法——Parzen窗估计、k近邻估计;k近邻分类器

本文简述了以下内容: (一)非参数方法 (二)Parzen窗估计 (三)k近邻估计 (四)k近邻算法(k-nearest neighbor,kNN) (一)非参数方法(Non-parametric method) 对于生成模型来说,重要的地方在于类条件概率密度 $p(\textbf x|\omega_i)$ 的估计.上一篇介绍的参数方法,假定其是一个固定的分布密度形式,然后估计这个显式表达的函数中未知的参数.但这里存在两个问题:首先,假定的形式可能是不准确的,实际数据并不符合这个假设:其次,经典