Opencv学习笔记 - OpenCV 4机器学习算法简介

        在机器学习中,一些比较流行方法的包括:支持向量机(SVM)、人工神经网络(ANN)、聚类、k-最近邻、决策树和深度学习。OpenCV支持并实现几乎所有这些方法,并有详细的文档说明(包含在Main modules的ml. Machine Learning模块中)。

一、OpenCV 4 机器学习算法

        机器学习的大致任务类型,回归、分类、聚类、异常检测。

        OpenCV实现了其中的八种机器学习算法,所有这些算法都继承自StatModel类,这八种算法是:

        ·人工神经网络

        ·决策树,用于分类任务

        ·期望最大化,用于聚类任务

        ·k-最近邻,用于分类任务

        ·逻辑回归,分类

        ·朴素贝叶斯分类器

        ·支持向量机,分类或回归

        ·随机梯度下降SVM

1、机器学习模块中的算法

算法 说明
Mahalanobis cv::Mahalanobis,马氏距离,表示数据的协方差距离。它是一个有效计算两个未知样本集的相似度的方法。与欧氏距离不同的是,它能考虑到各种特性之间的联系,并且是尺度无关的,即独立于测量尺度。如果协方差是单位矩阵,则马氏距离与欧氏距离相同。
K-means cv::kemans,是一个无监督的聚类算法,使用K个中心表示数据的分布,其中K由用户选择。该算法与期望最大化(EM)算法的区别在于,这里的中心不是高斯的,并且所得到的簇更像是肥皂泡,因为每个聚类中心都是通过竞争最近的数据得到的。
Normal Bayes Classifier cv::ml::NormalBayesClassifier,朴素贝叶斯分类器,一个生成式分类器。其中假设特征是高斯分布的并且在统计上彼此独立,这是一个通常不正确的强假设。出于这个原因,它通常被称为“朴素贝叶斯”分类器。
Decision Trees cv:ml:DTrees.决策树,一个判别式分类器。树在当前节点找到一个数据特征和一个
阈值,该值能最好地将数据划分为独立的类。数据被拆分后,递归地重复树的左右分
支这一过程。通常不是表现最好的算法,但值得首先尝试,因为其速度快且功能强大。
Expectation Maximization (EM) cv:ml:EM,期望最大化(EM),一个用于聚类的生成式无监督学习算法。它将N个多维高斯拟合到数据中。其中,由用户选择。这是仅使用少量参数(均值和方差)来表示复杂分布的有效方式
Boosting cv:anl::Boost,Boosting算法,一个判别式分类器组。整体分类决策由分类器组的组合加权分类决策做出。在训练中,我们一次学习一组分类器,该组中的每个分类器都是一个“弱”分类器(仅在机会性能之上)。这些弱分类器通常由称为树桩的单变量决策树组成。在训练中,决策树从数据中学习分类决策,并从其对数据的准确性中学习其“投票”的权重。在逐个训练每个分类器时,重新加权数据点,以便更多地关注发生错误的
数据点。该过程一直持续到由决策树的组合加权投票引起的数据集上的总误差低于设定阈值为止。当有大量训练数据可用时,该算法通常很有效
Random Trees cv:ml::RTrees,随机森林,一个流行的有监督分类算法,由许多决策树构成,每个树都建立在一个大的分裂深度上。在学习期间,允许每棵树的每个节点仅从数据特征的随机子集中选择分离变量。这有助于确保每棵树成为独立的决策者。在运行模式下,每棵
树都将获得一个未加权的投票。该算法通常非常有效,并且还可以通过对实现的每棵树的输出数进行平均来执行回归任务
K-NearestNeighbor(KNN) cv:ml::KNearet,KNN是最简单的判别分类器。训练数据只与标签一起存储,此后,
测试数据的类别由距离其最近的K个其他数据点的投票多少决定。此算法通常很有效,
但速度慢,需要大量内存
Fast Library for Approximate Nearest Neighbors(FLANN) cv::flanm,快速近似最近邻库(Fast L ibary for Approximate Nearest Neighbors,FLANN是用于在高维空间中执行快速近似最近邻搜索的库。在OpenCV中包含了由Marius Muja开发的FLANN库,它包含研究者发现最适合最近邻搜索的算法集合,以及根据数据集自动选择最佳算法和最佳参数的系统
support vector machines(SVM) cv:ml::SVM支持向量机,一个判别式分类器,也可以做回归任务。它定义了高维空间中任意两个数据点之间的距离函数。将数据投影到更高维度可使得数据变得更加线性可分。在数据有限时它往往是最好的,只有当大数据集可用时才会输给Boosting算法或随机森林算法
LogisticRegression cv:ml::LogisticRegression,Logistic回归分类器。Logistic回归是一个二元分类算法,与SVM一样,Logistic回归可以扩展到多类别分类问题,如数字识别等
Face Detector/Cascade Classifier 一个巧妙使用Boosting算法的目标检测程序。在OpenCV中带有经过训练的正面脸部检测器,效果非常好。除此之外,还可以使用OpenCV提供的软件训练其他对象检测器,或者使用其他特征或为此分类器创建自己的特征。它适用于刚性对象和特征视图
Latent SVM 隐变量支持向量机(Ltet SVM使用基于部件的模型来识别组合对象。它通过识别目标的各个独立部分,并学习一个模型如何发现这些部分之间的联系来识别复杂目标
Bag Of Words(bow) cv::BOWTrainer,词袋模型(BoW)是一个从文本文档中提取特征的方法,广泛用于自然语言处理、文本信息检索和文档分类。OpenCV中包含了视觉词袋Bag of Visual Words)方法,该方法将BoW应用到图像检测中,之后使用视觉词袋计算图像描述符。此方法功能强大,因为它不仅可用于识别单个对象,还可用于识别场景和环境
ANN cv::ml::ANN MLP,人工神经网络多层感知机算法
DNN 深度学习模块。从OpenCV3Ax版本开始,DNN从opencv_cortrib模块被移至OpenCV正式模块,并不断改进和扩充。这是对机器学习模块的巨大补充

2、OpenCV 4 机器学习的类层次结构

Opencv学习笔记 - OpenCV 4机器学习算法简介_第1张图片

        StatModel类是所有机器学习算法的基类,它提供预测和所有读写功能,这些功能对于保存和读取机器学习参数和训练数据非常重要。

        StatModel是诸如SVM或ANN等所有机器学习类(除了深度学习方法之外)的基类。StatModel基本上是一个虚拟类,它定义了两个最重要的函数:train和predict。train方法是负责使用训练数据集学习模型参数的主要方法。它有以下三种可能的调用方式:

        Train函数

        具有以下参数:

        ·TrainData:训练数据可以从TrainData类加载或创建。该类是OpenCV 3中的新增功能,可以帮助开发人员从机器学习算法中创建和提取训练数据。这样做是因为不同的算法需要不同类型的阵列结构用于训练和预测,例如ANN算法。

        ·samples:一系列训练阵列样本,例如采用机器学习算法所需格式的训练数据。

        ·layout:ROW_SAMPLE(训练样本是矩阵行)或COL_SAMPLE(训练样本是矩阵列)。        

        ·responses:与样本数据相关的响应向量。

        ·flags:由每个方法定义的可选标志。 

        最后一个训练方法创建并训练一个_TP类类型的模型。被接受的唯一类是不带参数或带所有默认参数值实现静态创建方法的类。

         predict方法

        更简单,只有一个可能的调用:

         该预测函数具有以下参数:

        ·samples:用于预测模型结果的输入样本可以包含任意数量的数据,无论是单个还是多个。        

        ·results:每个输入行样本的结果(由先前训练的模型的算法计算)。

        ·flags:这些可选标志与模型有关。某些模型(如Boost)由SVM StatModel::RAW_OUTPUT标志识别,这使得该方法可以返回原始结果(总和),而不是类标签。StatModel类为其他非常有用的方法提供接口:

        ·isTrained(),如果模型是训练过的,则返回true

        ·isClassifier(),如果模型是分类器,则返回true,如果是回归,则返回false

        ·getVarCount()返回训练样本中的变量数

        ·save(const string&filename)将模型保存在指定的文件中

        ·Ptr<_Tp>load(const string&filename)从指定的文件中加载模型,例如-Ptrsvm=StatModel::load(“my_svm_model.xml”)

        ·calcError(const Ptr&data,bool test,OutputArray resp)从测试数据计算错误,其中数据是训练数据。如果test参数为true,则该方法从测试数据子集计算错误;如果为false,则该方法计算所有训练数据的错误。resp是可选的输出结果。

你可能感兴趣的:(OpenCv,机器学习,opencv,机器学习,算法,支持向量机,深度学习)