分类器

目标检测:R-CNN

元气小坏坏 提交于 2020-02-04 23:37:43
R-CNN:Region-CNN,是第一个成功将深度学习应用到目标检测上的算法。 R-CNN 基于卷积神经网络( CNN ),线性回归,和支持向量机(SVM)等算法 ,实现目标检测技术。 创新点: 将CNN用作目标检测的特征提取器、有监督预训练的方式初始化CNN、在CNN特征上做BoundingBox 回归。 目标检测区别于目标识别很重要的一点是其需要目标的具体位置,也就是BoundingBox。而产生BoundingBox最简单的方法就是滑窗,可以在卷积特征上滑窗。但是我们知道CNN是一个层次的结构,随着网络层数的加深,卷积特征的步伐及感受野也越来越大。例如AlexNet的Pool5层感受野为195*195, feature map大小 为32*32,显然这种感受野是不足以进行目标定位的。使用浅层的神经网络能够保留这种空间结构,但是特征提取的性能就会大打折扣。RCNN另辟蹊径,既然我们无法使用卷积特征滑窗,那我们通过 Region P roposals( 区域建议 ) 方法产生一系列的区域,然后直接使用CNN去分类这些区域是目标还是背景不就可以吗?当然这样做也会面临很多的问题,不过这个思路正是RCNN的核心。因此RCNN全称为Regions with CNN features。 RCNN算法分为4个步骤 : 候选区域生成:一张图像生成1K~2K个候选区域 (采用Selective

KNN分类器

我怕爱的太早我们不能终老 提交于 2020-02-04 07:36:56
KNN学习(K-Nearest Neighbor algorithm,K最邻近方法 )是一种统计分类器,对数据的特征变量的筛选尤其有效。 基本原理 KNN的基本思想是:输入没有标签(标注数据的类别),即没有经过分类的新数据,首先提取新数据的特征并与測试集中的每一个数据特征进行比較;然后从測试集中提取K个最邻近(最类似)的数据特征标签,统计这K个最邻近数据中出现次数最多的分类,将其作为新的数据类别。 KNN的这样的基本思想有点类似于生活中的“物以类聚。人以群分”。 在KNN学习中,首先计算待分类数据特征与训练数据特征之间的距离并排序。取出距离近期的K个训练数据特征。然后根据这K个相近训练数据特征所属类别来判定新样本类别:假设它们都属于一类,那么新的样本也属于这个类;否则,对每一个候选类别进行评分,依照某种规则确定新的样本的类别。 笔者借用以下这个图来做更形象的解释: 如上图,图中最小的那个圆圈代表新的待分类数据。三角形和矩形分别代表已知的类型,如今须要推断圆圈属于菱形那一类还是矩形那一类。 可是我该以什么样的根据来推断呢? 看离圆形近期(K=1)的那个类型是什么,由图可知,离圆形近期的是三角形,故将新数据判定为属于三角形这个类别。 看离圆形近期的3个数据(K=3)的类型是什么,由图可知离圆形近期的三个中间有两个是矩形,一个是三角形,故将新数据判定为属于矩形这个类别。

朴素贝叶斯分类器Naive Bayes

☆樱花仙子☆ 提交于 2020-02-03 06:51:34
优点Naive Bayes classifiers tend to perform especially well in one of the following situations: When the naive assumptions actually match the data (very rare in practice) For very well-separated categories, when model complexity is less important For very high-dimensional data, when model complexity is less important 来源: https://www.cnblogs.com/focusonoutput/p/12254528.html

朴素贝叶斯分类器(伯努利贝叶斯+高斯贝叶斯+多项式贝叶斯)

送分小仙女□ 提交于 2020-02-03 00:58:58
1 from sklearn.datasets import load_diabetes 2 X,y=load_diabetes().data,load_diabetes().target 3 X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=8) 4 lr=LinearRegression().fit(X_train,y_train) 5 print("the coefficient:{}".format(lr.coef_)) 6 print('the intercept:{}'.format(lr.intercept_)) 7 print("the score of this model:{:.3f}".format(lr.score(X_test,y_test))) 1 import matplotlib.pyplot as plt 2 plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k') 3 plt.show() 1 #伯努利贝叶斯分类器 2 from sklearn.naive_bayes import BernoulliNB 3 bnb=BernoulliNB() 4 bnb.fit(X_train,y_train)

PyTorch 学习 (4) 训练分类器

岁酱吖の 提交于 2020-02-02 09:48:26
PyTorch 学习 PyTorch 学习 (4) 训练分类器 关于数据 训练图像分类器 1. 加载并标准化 CIFAR10 2. 定义卷积神经网络 CNN 3. 定义损失函数 Loss Function 和下降规则 4. 训练网络 5. 测试网络 在 GPU 上进行训练 PyTorch 学习 (4) 训练分类器 来自 PyTorch 教程 Deep Learning with PyTorch: A 60 Minute Blitz > Training a Classifier 关于数据 通常我们把图像、文本、声音、视频数据加载到 numpy 的数组中,然后再将其转换为 torch 的张量 对于图像,通常使用 Pillow , OpenCV 对于音频,通常使用 scipy , librosa 对于文本,直接使用 python 读取,或者使用 NLTK , SpaCy 针对计算机视觉,PyTorch 有一个专门的包 torchvision , 其中包括了常见的数据集的数据加载器, 如 ImageNet , CIFAR10 , MINIST 等,以及对于图像的数据转换器,如 torchvision.datasets , torch.utils.data.Dataloader 这给我们编写代码提供了极大的便利 这里我们使用 CIFAR10 数据集,该数据集的图片被分为了十种类别

AdaBoost

人走茶凉 提交于 2020-02-01 21:39:15
文章目录 1. 提升方法的基本思路 2. AdaBoost算法 3. AdaBoost训练误差的有界性 1. 提升方法的基本思路 提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。 对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类器(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。 这样,对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据权值或概率分布;而是如何将弱分类器组合成一个强分类器。关于一个问题,AdaBoost的做法是,提高那些被前一轮分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的增大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。置于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大额弱分类器的权值

AdaBoost

徘徊边缘 提交于 2020-02-01 03:28:32
集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式 通俗解释:做重要决定,综合多个专家的意见。机器学习处理问题时又何尝不是如此? 这就是集成方法背后的思想。 集成方法 投票选举(bagging: 自举汇聚法 bootstrap aggregating): 是基于数据随机重抽样分类器构造的方法。新数据集和原数据集的大小相等。每个数据集都是通过在原始 数据集中随机选择一个样本来进行替换而得到的。 再学习(boosting): 是基于所有分类器的加权求和的方法。boosting中的分类器权重并不相等,每个权重代表的是 其对应分类器在上一轮迭代中的成功度。 AdaBoost (adaptive boosting: 自适应 boosting) 概述 AdaBoost 优缺点 优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。 缺点:对离群点敏感。 适用数据类型:数值型和标称型数据。 AdaBoost的一般流程 (1) 收集数据:可以使用任意方法。 (2) 准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可 以处理任何数据类型。当然也可以使用任意分类器作为弱分类器,第2章到第6章中的 任一分类器都可以充当弱分类器。作为弱分类器,简单分类器的效果更好。 (3) 分析数据

《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算法提高分类性能

不想你离开。 提交于 2020-02-01 00:20:25
第七章 利用AdaBoost元算法提高分类性能([代码][ch07]) AdaBoost算法的优缺点 优点: 泛化错误率低,易编码,可以应用再大部分分类器上,无参数调整。 缺点: 对离群点敏感。 使用数据类型: 数值型和标称型数据。 bagging: 基于数据随机重抽样的分类器构造方法 在原始数据选择S次后得到S个数据集的一种技术。新数据集和原数据集的大小相等。每个数据集通过原始样本中随机替换得到的。 boosting 收集数据:可以使用任意方法。 准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。当然也可以使用任意分类器作为弱分类器,第2章到第6章中的任一分类器都可以充当弱分类器。作为弱分类器,简单分类器的效果更好。 分析数据:可以使用任意方法。 训练算法: Adaboost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。 测试算法:计算分类的错误率。 使用算法:同SVM一样, Adaboost预测两个类别中的一个。如果想把它应用到多个类次后别的场合,那么就要像多类SVM中的做法一样对。 训练算法: 基于错误提升分类器的性能 AbaBoost算法会不断得重复训练和调整权重的过程,直到悬链错误率为0或者弱分类器的数目达到用户的制定值为止。 基于单层决策树构建弱分类器 伪代码 将minError设置为无穷大

ROC曲线 vs Precision-Recall曲线

☆樱花仙子☆ 提交于 2020-01-31 22:50:29
 深入理解对比两个曲线各自的特性和相互的差异需要花不少时间研读一些国外的技术博客与相关paper,暂时先列出下面这么多,这部分后续 可以继续补充 。  ROC曲线和AUC的定义可以参看“ ROC曲线于AUC ”,Precision-Recall曲线顾名思义即Precision为纵轴,Recall为横轴的曲线,作图方法与AUC曲线一致,只是横纵轴坐标意义不同。 ROC曲线的优势   ROC曲线有个很好的特性: 当测试集中的正负样本的分布变化的时候,ROC曲线能够保持稳定 。在实际的数据集中经常会出现类不平衡现象,而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比。   其中(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类器在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍。可以明显看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。   PR曲线会面临一个问题,当需要获得更高recall时,model需要输出更多的样本,precision可能会伴随出现下降/不变/升高,得到的曲线会出现浮动差异(出现锯齿),无法像ROC一样保证单调性。所以, 对于正负样本分布大致均匀的问题

非平衡数据处理方式与评估

自作多情 提交于 2020-01-31 22:42:17
解决这一问题的基本思路是让正负样本在训练过程中拥有相同的话语权,比如利用采样与加权等方法。为了方便起见,我们把数据集中样本较多的那一类称为“大众类”,样本较少的那一类称为“小众类”。 解决方式分为: 一、相关方法总结 1、采样 采样方法是通过对训练集进行处理使其从不平衡的数据集变成平衡的数据集,在大部分情况下会对最终的结果带来提升。 采样分为上采样(Oversampling,过采样)和下采样(Undersampling, 欠采样),上采样是把小种类复制多份,下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。 随机采样最大的优点是简单,但缺点也很明显。上采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合;而下采样的缺点显而易见,那就是最终的训练集丢失了数据,模型只学到了总体模式的一部分。 上采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。 ——这一方式会加重过拟合! 因为下采样会丢失信息,如何减少信息的损失呢? 第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器