分类器

opencv5-objdetect之级联分类器

混江龙づ霸主 提交于 2020-03-16 21:23:54
这是《opencv2.4.9tutorial.pdf》的objdetect module的唯一一个例子。 在opencv中进行人脸或者人眼 或者身体的检测 首先就是训练好级联分类器,然后就是检测就行。在opencv中,“opencv/sources/data中就有内置训练好的:基于haar特征的级联分类器、基于hog特征的级联分类器、基于lbp特征的级联分类器”三种。相比较来说 算haar文件夹中的分类器最多,其他两个比如:hog的只有一个行人检测分类器“hogcascade_pedestrians.xml”而已; lbp的有三个分类器:“lbpcascade_frontalface.xml”、“lbpcascade_profileface.xml”、“lbpcascade_silverware.xml”。· 采用的是级联分类器类: CascadeClassifier,并通过不同的分类器类型进行初始化。 1、先设定不同的分类器: 这里使用自带的haar特征的前人脸和眼睛级联分类器: string face_cascade_name = "haarcascade_frontalface_alt.xml"; string eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml"; 2、然后进行分类器类的初始化:

机器学习和推荐系统中的评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)简介

你离开我真会死。 提交于 2020-03-16 01:21:38
数据挖掘、机器学习和推荐系统中的评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)简介。 引言: 在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。 业内目前常常采用的评价指标有准确率(Precision)、召回率(Recall)、F值(F-Measure)等,下图是不同机器学习算法的评价指标。下文讲对其中某些指标做简要介绍。 在介绍指标前必须先了解“混淆矩阵”: 混淆矩阵 True Positive(真正,TP):将正类预测为正类数 True Negative(真负,TN):将负类预测为负类数 False Positive(假正,FP):将负类预测为正类数误报 (Type I error) False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error) 1、准确率(Accuracy) 准确率(accuracy)计算公式为: 注:准确率是我们最常见的评价指标,而且很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。 准确率确实是一个很好很直观的评价指标,但是有时候准确率高并不能代表一个算法就好。比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:不发生地震、1:发生地震。一个不加思考的分类器,对每一个测试用例都将类别划分为0

Softmax回归

吃可爱长大的小学妹 提交于 2020-03-14 18:47:49
Softmax回归 1. softmax回归模型   softmax回归模型是logistic回归模型在多分类问题上的扩展(logistic回归解决的是二分类问题)。   对于训练集 ,有 。   对于给定的测试输入 ,我们相拥假设函数针对每一个类别j估算出概率值 。也就是说,我们估计 得每一种分类结果出现的概率。因此我们的假设函数将要输入一个 维的向量来表示这 个估计得概率值。假设函数 形式如下:   其中 是模型的参数。 这一项对概率分布进行归一化,舍得所有概率之和为1.   softmax回归的代价函数:   上述公式是logistic回归代价函数的推广。logistic回归代价函数可以改为:   可以看到,softmax代价函数与logistic代价函数在形式上非常类似,只是在softmax损失函数中对类标记的 个可能值进行了累加。注意在softmax回归中将 分类为 的概率为: 有了上面的偏导数公式以后,我们就可以将它代入到梯度下降法等算法中,来最小化 。 例如,在梯度下降法的标准实现中,每一次迭代需要进行如下更新: 2. 权重衰减 在实际应用中,为了使算法实现更简单清楚,往往保留所有参数 ,而不任意地将某一参数设置为 0。但此时我们需要对代价函数做一个改动:加入权重衰减。权重衰减可以解决 softmax 回归的参数冗余所带来的数值问题。 我们通过添加一个权重衰减项

技术文档

岁酱吖の 提交于 2020-03-13 19:50:38
开发需求分析 功能:合理推荐学生找到合适的自习室,节省时间。 开发策略:通过后端处理数据,将之展现在前段搭建的平台上。 框架:   前端:html5   后端:OpenCV和C++ 基本架构   前段用于处理用户的输入以及需求信息,后端用于处理运算用户所需的结果 前端架构设计 一、功能 读入学生对于某教学楼的查询需求,并显示对应结果 二、页面构成 1.顶端是中国人民大学的logo,以及“教室资源管理系统”的字样。 2.中间是搜索框和搜索按钮 3. 下方左侧是选择指定教学楼的单选表单 ; 4. 下方右侧是显示搜索结果的表格 , 一列为教室编号 , 另一列为拥挤程度。 三、 页面设计 : 初步设计的页面如下图所示 , 之后会继续修改 : 后端架构设计: 后端人脸检测部分使用OpenCV和C++语言完成。它分为下面两个部分: (一)分类器的训练 建立一个含有大量图片的样本库,样本库中的图片分为包含人脸特征和不包含人脸特征两种。从样本库中将人脸和非人脸的haar-like特征提取出来,作为分类器训练过程的输入,然后使用Adaboost算法训练出一个级联的强分类器。该分类器就是一个对人脸和非人脸的判断器。 (二)人脸检测 若待检测的是视频或摄像头的录像,则从其中提取一帧进行图片预处理;若待检测的是图片,则直接进行图片预处理阶段。加载在上一步工作中训练得到的分类器,对截取的待识别图像进行检测

集成学习详解

╄→гoц情女王★ 提交于 2020-03-12 11:56:14
摘要 :本文主要目的是梳理集成学习的知识体系 一、什么是集成学习? 面对一个机器学习问题,我们一般有两种方案: 1)训练不同的模型,选取一个效果最好的模型作为解决方案,进行重点调参优化 2)训练多个模型,可能每一个模型并不是最优的,但是综合考虑所有模型的输出结果,就会得到较好的最终结果 方案2便是集成学习 如果训练的多个模型是同一类型的模型(同为决策树或者神经网络等),则称该集成为“同质”的,所用算法称为“基学习算法”,每一个模型叫做“基学习器” 如果训练的多个模型非同一类型,则称该集成为“异质”的,此时不存在“基学习算法”的概念,每一个模型叫做“组件学习器”或“个体学习器”。 二、集成学习的分类 集成学习主要分为两大类,一类是bagging,另一类是boosting,他们分别对应着不同的训练和预测过程 首先我们要明确的是,不同基学习器的训练肯定对应着不同的样本分布或者不同的模型参数,如果使用同一个训练集的相同样本分布且模型参数相同(所选择模型),则集成学习没有意义。 1)在训练方面,bagging是通过对训练集的不同采样+基分类器选择不同超参数的方式进行训练,基分类器之间无强依赖,所以可以并行独自训练;boosting则是按照顺序,首先赋予样本相同的权重去训练第一个基分类器,然后根据该分类器在决策上的表现,提高该分类器分错的样本对应的权重,训练下一个基分类器

深度学习—线性分类器理解

谁说胖子不能爱 提交于 2020-03-12 11:26:04
1、我们将要实现一种更强大的方法来解决图像分类问题,该方法可以自然地延伸到神经网络和卷积神经网络上。这种方法主要有两部分组成:一个是评分函数(score function),它是原始图像数据到类别分值的映射。另一个是损失函数(loss function),它是用来量化预测分类标签的得分与真实标签之间一致性的。该方法可转化为一个最优化问题,在最优化过程中,将通过更新评分函数的参数来最小化损失函数值。 2、线性映射关系      W的每一行都是一个分类类别的分类器。对于这些数字的几何解释是:如果改变其中一行的数字,会看见分类器在空间中对应的直线开始向着不同方向旋转。而偏差b,则允许分类器对应的直线平移。需要注意的是,如果没有偏差,无论权重如何,在 时分类分值始终为0。这样所有分类器的线都不得不穿过原点。    将线性分类器看做模板匹配 :关于权重W的另一个解释是它的 每一行对应着一个分类的模板 (有时候也叫作 原型 )。一张图像对应不同分类的得分,是通过使用内积(也叫 点积 )来比较图像和模板,然后找到和哪个模板最相似。从这个角度来看,线性分类器就是在利用学习到的模板,针对图像做模板匹配。从另一个角度来看,可以认为还是在高效地使用k-NN,不同的是我们没有使用所有的训练集的图像来比较,而是每 个类别只用了一张图片 (这张图片是我们学习到的,而不是训练集中的某一张),而且我们会使用(负

集成学习2——bagging

这一生的挚爱 提交于 2020-03-12 08:37:46
本博客仅用于记录学习知识,如有雷同请联系我 参考: https://blog.csdn.net/qq_34106574/article/details/82016442 清华大学 数据挖掘课程 1.Bagging——BootStrap Aggregation bagging是有放回的取出样本中的部分样本,进行多次这种操作得到多组样本,用这些样本训练多个分类器,然后在预测的时候,用这些分类器进行预测,用这些预测值进行投票。比如7个预测为1,3个预测为0,则总的预测值就为1。 2.典型算法 随机森林——Random Forest 随机森林就是将多个(500 <= M <= 5000)决策树集合起来得到一个森林进行决策,根据上面的定义,就是用不同的决策树进行预测,然后用这些预测进行投票。 假设有N个样本,有放回的取N个样本,这种随机抽取的方法最终 的极限是 ,而剩下的数据可以用于测试集。 当然对于这M个决策树,在测试的时候可以用到的测试集的数据是要在训练中没有用的高的数据(训练集不一样,测试集也不一样)。 如果每个样本的特征维度为K,指定一个常数k<<K,随机地从K个特征中选取k个特征子集,每次树进行分裂时,从这k个特征中选择最优的,这和决策树的特征有关 优点: 1.不需要人为的去讲数据分成测试集验证集 2.不需要担心过拟合问题,在随机森林中有多个决策树,即使有一部分树过拟合了

贝叶斯分类器-----机器学习

醉酒当歌 提交于 2020-03-11 19:47:39
贝叶斯分类器中的涉及到的数学知识基本上是概率论与数理统计,其计算步骤倒是不难,西瓜书上的公式表示可能让人没有看下去的欲望,博主最开始学的时候也就是直接拿个例子计算一遍,然后再去看看西瓜书上的公式。贝叶斯中的核心计算公式就是条件概率的计算公式。 先看看条件概率的计算公式: 上面这个公式指的是事件A在事件B发生的条件下发生的概率。同理:P(B|A) = P(AB)/P(A)。这样上面也可以写成 。 接下来,我们直接看个例子,以西瓜书上的例子来看: 使用以上数据集作为训练集来训练贝叶斯分类器。 现在来了一个新的数据: 根据新样本的属性值,我们需要判断这个样本是好瓜的概率有多大。很明显我们需要计算:P(好瓜 | 色泽=青绿,根蒂=蜷缩,敲声=浊响,纹理=清晰,脐部=凹陷,密度=0.697,含糖率=0.460),这些属性值的条件下,好瓜的概率。将条件概率的公式代入:P(好瓜 | 色泽=青绿,根蒂=蜷缩,敲声=浊响,纹理=清晰,脐部=凹陷,密度=0.697,含糖率=0.460) = P(色泽=青绿,根蒂=蜷缩,敲声=浊响,纹理=清晰,脐部=凹陷,密度=0.697,含糖率=0.460,好瓜) / P(色泽=青绿,根蒂=蜷缩,敲声=浊响,纹理=清晰,脐部=凹陷,密度=0.697,含糖率=0.460) = P(好瓜) X P(色泽=青绿,根蒂=蜷缩,敲声=浊响,纹理=清晰,脐部=凹陷,密度=0

PyTorch 训练一个分类器

邮差的信 提交于 2020-03-11 16:36:47
本文源自 http://studyai.com/pytorch-1.4/beginner/blitz/cifar10_tutorial.html 就是这个!你已经了解了如何定义神经网络、计算损失和更新网络的权重。 现在你可能在想,……. 数据如何? 通常,当你必须处理图像、文本、音频或视频数据时,可以使用标准python包将数据加载到numpy数组中。 然后你可以把这个array转换成一个 torch.*Tensor 。 对于图像, packages 比如 Pillow, OpenCV 很有用 对于音频, packages 比如 scipy 和 librosa 对于文本, 或者 raw Python 或者 Cython based 加载, 或 NLTK 和SpaCy 很有用 我们专门为vision创建了一个名为 torchvision 的包,它为常见数据集(如Imagenet、CIFAR 10、MNIST等)提供了数据加载器。 以及用于图像的数据变换器(data transformers),即 torchvision.datasets 和 torch.utils.data.DataLoader 。 这提供了巨大的方便,避免了编写样板代码。 对于本教程,我们将使用CIFAR 10数据集。它有“飞机”、“汽车”、“鸟”、“猫”、“鹿”、“狗”、“青蛙”、“马”、“船”、“卡车”。

多分类学习与类别不平衡问题------机器学习

耗尽温柔 提交于 2020-03-09 15:33:15
多分类学习 我们初始遇见最多的是一般是二分类问题,如kaggle平台上的众多竞赛(CTR、异常检测任务等)。关于多分类任务,可以由二分类学习的思想进行推广来解决。考虑N个类别 ,多分类学习的基本思想是“ 拆解法 ”,就是我们可以将其拆解为多个二分类的任务,训练多个分类器,最后将这些分类器的预测结果进行集成来获得多分类任务的结果。 采用这种方式的关键就在于如何拆分,如何将分类器的结果集成。 经典的拆分策略:一对一(OvO)、一对其余(OvR)、多对多(MvM)。 给定数据集 , 。采用一对一(OvO)的方式就是将这N个类别进行两两配对,这样就可以产生N(N-1)/2个二分类任务(这个计算应该会吧:(n-1)+(n-2)+....+1),这样一来就是等到了N(N-1)/2个分类的结果,如果来了一个新的数据,我们不知道这个是哪一个类别,那么这个新的数据就输入已经训练好的分类器中,这样产生的结果进行投票,哪个预测出的类别数最多,那么这个新的数据就属于哪个类别。 对于一对其余(OvR)的方式而言,则是每次将一个类的样例作为正例、所有的其他类作为反例来训练N个分类器。如果来了一个新的数据,我们不知道这个是哪一个类别,那么这个新的数据就输入已经训练好的N个分类器中,如果仅仅有一个分类器预测为正类,则对应的类别标记作为最终的分类结果。 从上面我们可以看到,一对其余的方式只需要训练N个分类器