您的位置:

python训练级联分类器(级联分类器训练要多久)

本文目录一览:

cv.crearimage 这个函数可以用cv2中的哪个函数替代

(1)cvLoadImage()函数

含义:是从磁盘中载入图像的函数;

函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );

第一个参数:filename :要被读入的文件的文件名(包括后缀);

这里要特别注意(有三种读入方法)

1,直接从任意磁盘中读取图片,必须是是绝对路径,遇到反斜杠的时候变成两个反斜杠,例如“G:\\Image\\1.jpg”;

2,将图片直接放在工程文件夹下面即可,与debug文件同级,例如".\\face2.jpg";

3,可以利用命令行参数添加文件的路径引用(这里不详述)

第二个参数:指定读入图片的颜色和深度。这里的color有几个值可以选择

这里注意(有两种方法)

1,利用变量。

CV_LOAD_IMAGE_COLOR 默认情况下,图像是以8位,3个通道的形式被读入(默认也使得图像强制转换为3通道)

CV_LOAD_IMAGE_GRAYSCALE 强制转换为单通道

CV_LOAD_IMAGE_ANGCOLOR 则以保持原始图像通道数的方式读入

CV_LOAD_IMAGE_ANYDEPTH ???这个含义好像使读入的图像为16位图像

CV_LOAD_IMAGEUNCHANGED 使得读入图像的通道数和位数与原始图像保持一致

2,利用数字代替参变量。

-1 默认读入图像的原通道数

0 强制转换为灰度图

1 读入彩色图

(2)cvCreateImage()函数

含义 :创建首地址并分配存储空间

函数原型:IplImage* cvCreateImage( CvSize size, int depth, int channels );

第一个参数:size 图像的宽和高

这个参数的设置也有好几种方式

1 :IplImage* Image = cvLoadImage("G:\\Image\\1.jpg",1);//读入一张彩色图

CvSize grayImageSize;

grayImageSize.width = Image-width;

grayImageSize.height = Image-height;

IplImage*grayImage =cvCreateImage(grayImageSize,Image-depth,1); //开辟一个Image图像相同的内存

cvCvtColor(Image,grayImage,GRAY2RGB); //将彩色图Image,转换为灰度图grayImage

2: IplImage*grayImage =cvCreateImage(CvSize(Image-width,Image-height),Image-depth,1);

3: IplImage*grayImage =cvCreateImage(CvSize(cvGetSize(Image)),Image-depth,1);

第二个参数 :图像元素的深度,可以是下面的其中之一

IPL_DEPTH_8U - 无符号8位整型

IPL_DEPTH_8S - 有符号8位整型

IPL_DEPTH_16U - 无符号16位整型

IPL_DEPTH_16S - 有符号16位整型

IPL_DEPTH_32S - 有符号32位整型

IPL_DEPTH_32F - 单精度浮点数

IPL_DEPTH_64F - 双精度浮点数

第三个参数:channels 每个元素(像素)通道数.可以是 1, 2, 3 或 4.通道是交叉存取的,

例如通常的彩色图像数据排列是:b0 g0 r0 b1 g1 r1 ... 虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些OpenCV 也能

处理他, 但是这个函数只能创建交叉存取图像.。

python如何绘制预测模型校准图

python绘制预测模型校准图可以使用校准曲线,因为预测一个模型校准的最简单的方法是通过一个称为“校准曲线”的图(也称为“可靠性图”,reliability diagram)。

这个方法主要是将观察到的结果通过概率划分为几类(bin)。因此,属于同一类的观测值具有相近的概率。

对于每个类,校准曲线将预测这个类的平均值,然后将预测概率的平均值与理论平均值(即观察到的目标变量的平均值)进行比较。

你只需要确定类的数量和以下两者之间的分类策略即可:

1、“uniform”,一个0-1的间隔被分为n_bins个类,它们都具有相同的宽度。

2、“quantile”,类的边缘被定义,从而使得每个类都具有相同数量的观测值。

假设你的模型具有良好的精度,则校准曲线将单调增加。但这并不意味着模型已被正确校准。实际上,只有在校准曲线非常接近等分线时(即下图中的灰色虚线),您的模型才能得到很好的校准,因为这将意味着预测概率基本上接近理论概率。

python绘制预测模型中如何解决校准错误:

假设你已经训练了一个分类器,该分类器会产生准确但未经校准的概率。概率校准的思想是建立第二个模型(称为校准器),校准器模型能够将你训练的分类器“校准”为实际概率。

因此,校准包括了将一个一维矢量(未校准概率)转换为另一个一维矢量(已校准概率)的功能。

两种常被用作校准器的方法:

1、保序回归:一种非参数算法,这种非参数算法将非递减的自由格式行拟合到数据中。行不会减少这一事实是很重要的,因为它遵从原始排序。

2、逻辑回归:现在有三种选择来预测概率:普通随机森林、随机森林 + 保序回归、随机森林 + 逻辑回归。

2019-03-02

集成学习: 构建并结合多个学习器来完成学习任务。

同质: 集成中只包含同种类型的个体学习器(基学习器);

异质: 集成中的个体学习器(组件学习器)由不同学习算法生成。

个体学习器的“准确性”和“多样性”很重要,且相互冲突。

分类: 个体学习器间存在强依赖关系,必须串行生成的序列化方法,eg,Boosting;个体学习器间不存在强依赖关系,可同时生成的并行化方法,eg,Bagging和随机森林。

工作机制: 先从初始训练集训练出一个基学习器1,根据基学习器误差率表现更新训练样本权重,使弱学习器1学习误差率高的训练样本权重变高,让这些点在弱学习器2中得到更多的重视,然后基于调整权重后的训练集训练学习器2,...重复进行,直至弱学习器数目达到指定的值T,最终将这T个基学习器进行加权结合。

Boosting族算法最著名的代表是AdaBoost,是“Adaptive Boosting(自适应增强)”的缩写。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

算法过程

优点:作为分类器时精度很高;在AdaBoost框架下,可使用各种回归分类模型来构建学习器;不易发生过拟合(会加入正则化项)。

缺点:对异常样本点敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

两者均是0/1误差的平滑近似:

梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的基函数集合,提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部最小值。

GB每一次建立模型 是在之前建立模型 损失函数的梯度下降方向。一般认为损失函数越小,性能越好,因此最好是使损失函数沿着梯度方向下降,模型得以不断改进提升性能。

GBDT是GB和DT的结合,是以决策树为基学习器的gb算法,此处的决策树是回归树。GBDT中的决策树深度一般不超过5,叶子结点数不超过10。GBDT核心在于: 每一棵树学得是之前所有树结论和的残差 ,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学习。

xgboost是在GBDT基本思路上改善而来,主要改变有

1) 在损失函数中加入防止过拟合的惩罚函数

T是叶子的个数,w是预测函数的参数,也就是决策树算法下叶子节点的权重值。可以控制γ和λ这两个超参数来调整正则化的惩罚力度。其实这里的惩罚函数也就定义了模型复杂度,比如γ越大,λ越大,复杂度越小越不易过拟合。

2) 用二阶泰勒展式将损失函数展开,同时用到了一阶和二阶导数

第t次的loss:

对上式做二阶泰勒展开:g为一阶导数,h为二阶导数

3)CART回归树中寻找最佳分割点的衡量标准是最小化均方差,xgboost 寻找分割点的标准是最大化 ,lamda,gama与正则化项相关

xgboost算法的步骤和GB基本相同,都是首先初始化为一个常数,gb是根据一阶导数ri,xgboost是根据一阶导数gi和二阶导数hi,迭代生成基学习器,相加更新学习器。

为得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立,考虑使用相互有交叠的采样子集。

并行式集成学习的最著名代表,基于自助采样法,算法流程如下:

优点:训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶;与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改的用于多分类、回归任务;初始训练集63.2%用于训练,36.8%用作验证集对泛化性能做“包外估计”。

但从偏差-方差分解角度看,Bagging主要关注降低方差。

随机森林是Bagging的一个扩展变体,在以决策树为基学习器构建Bagging集成的基础上,在决策树训练过程中引入了 随机属性选择 。即对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k(kd,d为所有属性个数)个属性的子集,然后从中选一个最优属性用于划分。若k=d,则为传统决策树;k=1,则随机选择一个属性划分。一般推荐 。

RF起始性能相对较差,但随着学习器数目的增加,会收敛到更低的泛化误差。另外RF的训练效率常优于Bagging,因为Bagging使用“确定型”决策树,选择划分属性时要对结点所有属性进行考察,而RF使用“随机型”决策树,只需考虑一个属性子集。

学习器结合可能会从三个方面带来好处:

1)统计方面:当多个假设达到同等性能时,可减小因误选单学习器导致泛化性能不佳的风险;

2)计算方面:降低陷入糟糕局部极小点的风险;

3)表示方面:扩大相应假设空间,学习更好的近似。

对数值型输出 ,最常见的结合策略是平均法。

简单平均:                    

(特殊的加权平均法,宜在个体学习器性能相近时使用)

加权平均法:                

其中 是个体学习器 的权重,一般从训练数据中学习而得,通常要求 ,宜在个体学习器相差较大时使用。

对分类任务,学习器从类别标记集合中预测出一个标记,最常见的结合策略是投票法。

绝大多数投票法:

相对多数投票法:

                             

预测为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个。

加权投票法:

                         

与加权平均法类似, 是 的权重,通常 。

个体学习器的输出类型:

类标记: 硬投票。 ,若 将样本x预测为类别 则取值为1,否则为0。

类概率: 软投票。 ,相当于对后验概率 的一个估计。

不同类型的 值不能混用;对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用;分类置信度应规范化后使用;基于类概率进行结合优于直接基于类标记进行结合;若基学习器类型不同,不能直接比较类概率值,应先将其转化为类标记输出(eg类概率输出最大的设为1,其他为0)再投票。

当训练数据很多时,常使用通过另一个学习器来进行结合的“学习法”,代表算法Stacking

第一阶段获得各个模型对样本x1的预测标签值;第二阶段将各个模型的预测标签值作为一个新的特征(x1的真实标签值还是标签值),再用某个算法进行训练,获得一个融合模型,用这个融合模型进行测试集的预测。

周志华《机器学习》

python机器学习库怎么使用

1. Scikit-learn(重点推荐)

www .github .com/scikit-learn/scikit-learn

Scikit-learn 是基于Scipy为机器学习建造的的一个Python模块,他的特色就是多样化的分类,回归和聚类的算法包括支持向量机,逻辑回归,朴素贝叶斯分类器,随机森林,Gradient Boosting,聚类算法和DBSCAN。而且也设计出了Python numerical和scientific libraries Numpy and Scipy2、Keras(深度学习)

Keras是基于Theano的一个深度学习框架,它的设计参考了Torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU。

3、Lasagne(深度学习)

不只是一个美味的意大利菜,也是一个和Keras有着相似功能的深度学习库,但其在设计上与它们有些不同。

4.Pylearn2

www .github .com/lisa-lab/pylearn2

Pylearn是一个让机器学习研究简单化的基于Theano的库程序。它把深度学习和人工智能研究许多常用的模型以及训练算法封装成一个单一的实验包,如随机梯度下降。

5.NuPIC

www .github .com/numenta/nupic

NuPIC是一个以HTM学习算法为工具的机器智能平台。HTM是皮层的精确计算方法。HTM的核心是基于时间的持续学习算法和储存和撤销的时空模式。NuPIC适合于各种各样的问题,尤其是检测异常和预测的流数据来源。

6. Nilearn

www .github .com/nilearn/nilearn

Nilearn 是一个能够快速统计学习神经影像数据的Python模块。它利用Python语言中的scikit-learn 工具箱和一些进行预测建模,分类,解码,连通性分析的应用程序来进行多元的统计。

7.PyBrain

www .github .com/pybrain/pybrain

Pybrain是基于Python语言强化学习,人工智能,神经网络库的简称。 它的目标是提供灵活、容易使用并且强大的机器学习算法和进行各种各样的预定义的环境中测试来比较你的算法。

8.Pattern

www .github .com/clips/pattern

Pattern 是Python语言下的一个网络挖掘模块。它为数据挖掘,自然语言处理,网络分析和机器学习提供工具。它支持向量空间模型、聚类、支持向量机和感知机并且用KNN分类法进行分类。

9.Fuel

www .github .com/mila-udem/fuel

Fuel为你的机器学习模型提供数据。他有一个共享如MNIST, CIFAR-10 (图片数据集), Google's One Billion Words (文字)这类数据集的接口。你使用他来通过很多种的方式来替代自己的数据。

10.Bob

www .github .com/idiap/bob

Bob是一个免费的信号处理和机器学习的工具。它的工具箱是用Python和C++语言共同编写的,它的设计目的是变得更加高效并且减少开发时间,它是由处理图像工具,音频和视频处理、机器学习和模式识别的大量软件包构成的。

11.Skdata

www .github .com/jaberg/skdata

Skdata是机器学习和统计的数据集的库程序。这个模块对于玩具问题,流行的计算机视觉和自然语言的数据集提供标准的Python语言的使用。

12.MILK

www .github .com/luispedro/milk

MILK是Python语言下的机器学习工具包。它主要是在很多可得到的分类比如SVMS,K-NN,随机森林,决策树中使用监督分类法。 它还执行特征选择。 这些分类器在许多方面相结合,可以形成不同的例如无监督学习、密切关系金传播和由MILK支持的K-means聚类等分类系统。

13.IEPY

www .github .com/machinalis/iepy

IEPY是一个专注于关系抽取的开源性信息抽取工具。它主要针对的是需要对大型数据集进行信息提取的用户和想要尝试新的算法的科学家。

14.Quepy

www .github .com/machinalis/quepy

Quepy是通过改变自然语言问题从而在数据库查询语言中进行查询的一个Python框架。他可以简单的被定义为在自然语言和数据库查询中不同类型的问题。所以,你不用编码就可以建立你自己的一个用自然语言进入你的数据库的系统。

现在Quepy提供对于Sparql和MQL查询语言的支持。并且计划将它延伸到其他的数据库查询语言。

15.Hebel

www .github .com/hannes-brt/hebel

Hebel是在Python语言中对于神经网络的深度学习的一个库程序,它使用的是通过PyCUDA来进行GPU和CUDA的加速。它是最重要的神经网络模型的类型的工具而且能提供一些不同的活动函数的激活功能,例如动力,涅斯捷罗夫动力,信号丢失和停止法。

16.mlxtend

www .github .com/rasbt/mlxtend

它是一个由有用的工具和日常数据科学任务的扩展组成的一个库程序。

17.nolearn

www .github .com/dnouri/nolearn

这个程序包容纳了大量能对你完成机器学习任务有帮助的实用程序模块。其中大量的模块和scikit-learn一起工作,其它的通常更有用。

18.Ramp

www .github .com/kvh/ramp

Ramp是一个在Python语言下制定机器学习中加快原型设计的解决方案的库程序。他是一个轻型的pandas-based机器学习中可插入的框架,它现存的Python语言下的机器学习和统计工具(比如scikit-learn,rpy2等)Ramp提供了一个简单的声明性语法探索功能从而能够快速有效地实施算法和转换。

19.Feature Forge

www .github .com/machinalis/featureforge

这一系列工具通过与scikit-learn兼容的API,来创建和测试机器学习功能。

这个库程序提供了一组工具,它会让你在许多机器学习程序使用中很受用。当你使用scikit-learn这个工具时,你会感觉到受到了很大的帮助。(虽然这只能在你有不同的算法时起作用。)20.REP

www .github .com/yandex/rep

REP是以一种和谐、可再生的方式为指挥数据移动驱动所提供的一种环境。

它有一个统一的分类器包装来提供各种各样的操作,例如TMVA, Sklearn, XGBoost, uBoost等等。并且它可以在一个群体以平行的方式训练分类器。同时它也提供了一个交互式的情节。

21.Python 学习机器样品

www .github .com/awslabs/machine-learning-samples用亚马逊的机器学习建造的简单软件收集。

22.Python-ELM

www .github .com/dclambert/Python-ELM

这是一个在Python语言下基于scikit-learn的极端学习机器的实现。

23.gensim

主题模型python实现

Scalable statistical semantics

Analyze plain-text documents for semantic structureRetrieve semantically similar documents

python opencv怎么创建一个cascadeobjectdetector对象

OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns) 三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。

opencv_traincascade and opencv_haartraining 所输出的分类器文件格式并不相同。注意,新的级联检测接口(参考 objdetect 模块中的 CascadeClassifier 类)支持这两种格式。 opencv_traincascade 可以旧格式导出训练好的级联分类器。但是在训练过程被中断后再重启训练过程, opencv_traincascade and opencv_haartraining 不能装载与中断前不同的文件格式。

opencv_traincascade 程序使用TBB来处理多线程。如果希望使用多核并行运算加速,请使用TBB来编译OpenCV。还有一些与训练相关的辅助程序。

python+opencv 怎么实现一个和vision.cascadeobjectdetector一样的对象

OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Pattern...