
机器学习的目的是将数据转换为信息. 在学习了一系列数据之后,我们需要机器能够回答与这些数据有关的问题: 还有哪些其他数据与该数据最相似?图片中有吗?汽车?哪种广告能获得消费者最多的响应?由于消费者经常考虑价格因素,因此这个问题将变成“在我们出售的所有产品中,如果我们要制作广告,哪种产品最受欢迎?”从数据中提取规则或模式以将数据转换为信息.
机器学习的目标数据是温度,股价,色度等. 这些数据通常经过预处理后成为特征. 例如,我们有一个,该对10,000张脸部图像执行边缘检测,然后收集特征,例如边缘方向,边缘长度和距脸部中心的边缘偏移. 我们从每个面部获得包含500个数据的500个特征向量. 然后,我们使用机器学习技术来创建这些特征数据的某种类型. 模型. 如果我们只想将此数据划分为不同的类别(粗略,细分或其他类别),那么“聚类”算法就足够了. 如果项目学会根据脸部边缘的图案预测年龄,则需要一种“分类”算法. 为此,机器学习算法会分析我们收集的数据,分配权重,阈值和其他参数以提高性能. 调整参数以达到目标的过程称为“学习”;
了解机器学习方法的性能很重要,这是一个微妙的问题. 通常,我们将原始数据分为一个大型训练集(在我们的示例中为大约9000个面孔)和一个小的测试集(其余的1000个面孔). 我们使用雷永训练集来训练我们的分类器并学习年龄预测模型. 训练结束后,我们使用测试集来测试年龄预测分类器.
测试集不能用于训练分类器. 我们不让分类器知道测试集的年龄标签. 我们让分类器预测测试集的数据,记录预测结果,并检查预测年龄与实际年龄之间的符合程度. 如果分类器无效,请尝试添加新功能或考虑使用不同类型的分类器. 本章将介绍各种分类器和用于训练分类器的方法.
如果分类器运行良好,那么我们就有一个可以在现实世界中使用的潜在有价值的模型. 该系统可用于根据用户的年龄设置视频游戏的行为. 人们已经准备好玩游戏了. 那时,他们的脸部图像将被处理为500个特征. 该数据由分类器分类,并且预测年龄将用于设置游戏行为. 部署系统后,分类器将看到以前从未见过的面孔. 将根据学习结果做出判断.
最后,在开发训练分类系统时,通常会使用验证集. 有时,在最后测试整个系统是一项艰巨的任务. 在提交分类器进行最终测试之前,我们需要调整参数. 为此,我们可以将原始的10000个数据分为三部分: 8000个训练集,1000个验证集和1000个测试集. 现在,经过训练后,我们尝试使用验证集来预先测试分类器的效果. 只有对分类器的性能感到满意时,才能使用测试集做出最终判断.
有时,数据没有标签. 我们只想根据边缘信息查看脸部倾向于哪个组. 有时,数据带有标签,例如年龄. 这种标记的机器学习是受监督的(即,可以使用附加在数据特征向量上的“信号”或“标签”. 如果数据向量没有标签,则表明该机器学习是不受监督的.
监督学习可以确定类型,例如将姓名与面部相匹配,或分配数字标签(例如年龄). 当数据用名称(类型)标记时,表示我们正在进行分类;如果输出是数字值,则表示我们正在执行回归. 回归是通过分类或数字输入数据拟合数字输出.
监督学习也有一些模糊的领域: 它包括数据向量和标签的匹配,还包括延迟学习. 在强化学习中,可以将数据标签(也称为奖励或惩罚)分离在其中. 数据向量在被观察之后存在很长时间. 当鼠标穿过迷宫寻找食物时,它会经过一系列转弯并最终找到食物. 这是对它的奖励. 奖励必须反馈,这会影响鼠标寻找食物的过程. 强化学习也相同: 系统获得延迟的信号(奖励或惩罚),并根据该信号推断出下一个策略(例如如何在迷宫中迈出每一步). 监督学习也适用于不完整的标签,这意味着标签有缺陷(在这种情况下称为半监督学习)或噪音标签(标签有误). 大多数机器学习方法只能处理上述一种或两种情况. 例如: 一种算法可以处理分类,但不能进行回归;有些可以处理半监督学习,但不能进行强化学习;算法可以处理数字数据,但不能处理分类数据;等等.
有时,数据没有标签,但是我们对数据是否可以自然分类感兴趣. 这种无监督的学习算法称为聚类算法(簇字符串算法). 目的是根据它们的距离(预定或感觉)分类为远近,来组织这些未标记的数据. 我们只想看看面孔是否分散: 它们是胖的还是瘦的,长的还是正方形的?如果我们查看癌症数据,是否可以将不同化学信号的癌症数据聚集在一起?无监督的聚类数据通常形成特征向量,供更高级别的监督分类器使用. 我们可以先将人脸聚类为人脸形状(宽,窄,长,方),然后以人脸形状作为输入,然后可以添加其他数据(平均声音频率)来预测人的性别;
这两个典型的机器学习任务(分类和聚类)与计算机视觉中的两个基本任务(识别和分割)有一些共同点. 当我们需要一台计算机来确定一个物体是什么时,我们使用识别. 当我们需要计算机告诉对象的位置时,我们使用分段. 由于计算机视觉在很大程度上依赖于机器学习,因此opencv的ML部分包含大量的机器学习算法,并且该库位于/ opencv / ml目录中.

许多算法旨在解决学习和聚类问题. openCV包括一些最常用的统计机器学习方法. OpenCV支持诸如贝叶斯网络和图形模型之类的概率机器学习方法,这种方法相对较少,部分原因是这些算法仍然非常新颖并且还在不断发展,并且变化将很大. OpenCV倾向于支持判别算法,即根据给定数据判断类别(P(L \ D)),但不支持Production算法,其产生是该算法通过以下方式生成数据分布(P(DL)): 给定类别. 尽管两者之间的区别不是很明显,但是判别模型在基于给定数据进行预测方有优势. ,生成模型的优势在于可以为您提供强大的数据表达式或有条件地生成新数据(例如,考虑大象的样子;您将根据条件“大象”生成数据)
生产模式易于理解,因为它为数据生成建模. 区别在于学习算法通常基于看似随意的阈值做出判断. 例如: 假设在一个场景中定义了一个很小的区域,只是因为它的红色分量小于125. 但这是否意味着红色分量等于126不是道路?这种类型的问题很难清楚地解释. 生产模型通常被赋予一个类别,并且获得了数据的条件分布,因此您可以很容易地看到这种分布是否类似于真实分布.
openCv中的机器学习算法如下. 除了CXCORE库中的Mahalanobis和K-means算法外,人脸检测算法还位于CV库中,其他算法都位于ML库中
算法名称:
Mahalanobis: 通过除以协方差来变换数据空间,然后计算距离. 如果写方差矩阵是一个单位矩阵,则此度量等于欧几里得距离
K均值: 这是一种无监督的聚类方法,使用K均值表示数据的分布. K的大小由用户定义. 此方法与期望最大化方法之间的差异为K. 平均值的中心不是高斯的,并且由于每个中心都在竞争“捕获”最近的点svm测试数据集,因此聚类的结果更像是肥皂泡. 聚类区域通常被用作稀疏直方图的箱来描述数据.
正常/朴素贝叶斯分布: 这是一个通用分类器. 假定特征是高斯的,并且在统计上是独立的. 这个假设太苛刻,在许多条件下无法满足. 因此,它也被称为“朴素贝叶斯”分类器. 但是,在许多情况下,该分类器的效果出奇地好.
决策树: 这是一个判别式分类器. 该树通过在当前节点上查找数据特征和阈值来将数据最佳地划分为不同的类别. 处理流程是将数据连续划分并向下分解到树的左子节点或右子节点. 尽管它通常没有最佳的性能,但它通常是测试算法的最佳选择,因为它具有更快的处理速度和良好的功能.
提升: 多个判别子分类器的组合. 最终分类决策由每个子分类器的加权组合确定. 在训练过程中,对子分类器进行逐一训练,每个子分类器都是弱分类器(仅比随机选择的性能好). 这些弱分类器由称为“树桩”的单变量决策树组成. 在训练过程中,“树桩”不仅从数据中学习分类决策,而且还学习基于识别精度的投票. 在对分类器进行逐一训练时,数据样本的权重将重新分配,从而可以更加关注错误数据. 训练过程一直持续到总误差(所有决策树的加权组合分类器生成的误差)低于已设置的某个阈值为止. 为了取得良好的效果,该方法通常需要大量的数据训练.
随机森林: 这是由许多决策树组成的“森林”. 每个决策树都向下递归以获得最大深度. 在学习过程中,每棵树的每个节点仅从特征数据中获得随机值. 在子集中选择. 这确保了每棵树都是统计上不相关的分类器. 在识别过程中,对每棵树的结果进行投票以确定最终结果,并且每棵树具有相同的权重. 这种分类方法通常非常有效,并且对每棵树的输出进行平均以处理回归问题.
人脸检测/ Haar分类器: 该对象检测方法巧妙地使用了Boosting算法. OpenCV提供了一个正面人脸检测器,其检测效果非常好. 您还可以使用OpenCV提供的软件训练算法使它可以检测其他对象. 该算法非常适合于检测具有特定视角的刚性物体.

期望最大化(EM): 一种用于聚类的无监督生成算法,可以将N个多维高斯拟合到数据中,其中N的大小由用户确定. 此方法仅使用几个参数(均值和方差)可以非常有效地表示更负责任的分布. 此方法通常用于划分部门.
K最近邻: K最近邻可能是最简单的分类器. 训练数据与类别标签一起存储,对最接近测试数据(最接近欧几里德距离)的K个样本进行投票,以确定测试数据的分类结果. 这是您想到的最简单的方法. 这种方法通常更有效,但速度较慢并且需要更多内存.
神经网络/多层感知器: 此分类算法在输入节点和输出节点之间具有隐藏的节点,可以更好地表示输入信号. 训练分类器很慢,但是识别很快. 对于一些识别问题. 比如角色识别,他有很好的表现.
支持向量机(SVM): 可以分类. 也可以是回归. 该算法需要为高维空间中的任意两个点定义距离函数. (将数据投影到高维空间将使数据更容易线性分离). 该算法可以学习分类的超平面,以在高维空间中实现最佳分类. 当数据有限时,该算法可以获得很好的性能,而boosting和随机森林只能在只有大量训练数据的情况下使用.
基本上,所有算法都使用由要素组成的数据向量作为输入,要素的数量可以为数千. 假设您的任务是识别特定对象(例如人). 您遇到的第一个问题如何收集数据并标记数据(场景中没有人或没有人). 您会发现人们以不同的方式出现: 人的图像可能只包含少量像素,或者您只能看到一只耳朵始终出现在屏幕上. 在最坏的情况下,该人可能人的脸,树后的腿. 您需要定义场景中某人的确切定义.
以下将遇到收集数据的问题. 使用您自己的照相机进行收集,还是使用公共尝试查找“人”标签,或者同时使用这两种方法?收集运动信息?收集其他信息?如在现场门是开着的,时间,季节,温度是. 用于检测海滩人的算法可能不适用于滑雪胜地. 有必要捕获各种数据变化: 不同的视角,不同的灯光,不同的天气,阴影等.
获取大量数据后,如何标记数据?首先,您需要确定标签的含义. 您是否需要知道现场的人在哪里?运动信息重要吗?如果您有大量图像,应如何给所有数据提供图像标签?有很多技巧,例如在受限情况下进行背景减法,收集运动前景.
标记数据后,您需要确定需要提取哪些特征. 再一次,你必须知道你的目的. 如果人们总是积极地出现,则无需使用旋转不变的功能,也无需事先旋转对象. 简而言之,您必须寻找表达对象固有属性的特征,例如梯度直方图,颜色或当前流行的SIFT特征. 如果有背景信息,则可以先删除背景,提取对象,然后执行图像处理(规格化图像,缩放比例,旋转,直方图均衡化),计算许. 对象的特征向量将与对象的标签相对应.
将数据转换为特征向量后,您需要将数据分为训练集,验证集和测试集. 在这里,我建议交叉使用训练集,验证集和测试集. 也就是说: 将所有数据划分为K A个子集,然后每次随机选择一部分用于训练,其余点用于测试. 将测试结果取平均值,以获得最终的性能结果. 通过交叉验证,我们可以更清晰地看到分类器在处理异常数据时的性能.
数据已准备就绪,以下是分类器的选择. 通用分类器的选择需要考虑计算速度,数据形式和内存大小. 在某些应用中,用户更喜欢选择建模,因此分类器需要能够快速完成训练. 在这种情况下,最近邻居算法加上贝叶斯决策树是一个不错的选择. 如果您选择考虑存储因素,则决策树和神经网络是理想的选择. 如果您不需要快速训练,但需要快速判断,但需要非常高的进步,则可以选择增强森林和随机森林. 如果所选功能更好,则只需要一个简单易懂的分类器,然后选择决策树和最近的邻居算法即可. 为了获得最佳性能,或者不使用Boosting和随机森林算法.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-181569-1.html
德国总理将访华
小伙体挺不容易的