ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:507.51KB ,
资源ID:22722998      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22722998.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Opencv249源码分析GradientBoostedTrees详解Word文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Opencv249源码分析GradientBoostedTrees详解Word文档格式.docx

1、SQUARED_LOSS为平方损失函数,CvGBTrees:ABSOLUTE_LOSS为绝对值损失函数,CvGBTrees:HUBER_LOSS为Huber损失函数,CvGBTrees:DEVIANCE_LOSS为偏差损失函数,前三种用于回归问题,后一种用于分类问题weak_count表示GBT的优化迭代次数,对于回归问题来说,weak_count也就是决策树的数量,对于分类问题来说,weak_countK为决策树的数量,K表示类别数量shrinkage表示收缩因子vsubsample_portion表示训练样本占全部样本的比例,为不大于1的正数max_depth表示决策树的最大深度use_s

2、urrogates表示是否使用替代分叉节点,为true,表示使用替代分叉节点CvDTreeParams结构详见我的关于决策树的文章CvGBTrees类的一个构造函数:CvGBTrees:CvGBTrees( const cv:Mat& trainData, int tflag, const cv: responses, const cv: varIdx, sampleIdx, const cv: varType, missingDataMask, CvGBTreesParams _params ) data = 0; /表示样本数据集合 weak = 0; /表示一个弱学习器 default_

3、model_name = my_boost_tree; / orig_response表示样本的响应值,sum_response表示拟合函数Fm(x),sum_response_tmp表示Fm+1(x) orig_response = sum_response = sum_response_tmp = 0; / subsample_train和subsample_test分别表示训练样本集和测试样本集 subsample_train = subsample_test = 0; / missing表示缺失的特征属性,sample_idx表示真正用到的样本的索引 missing = sample_

4、idx = 0; class_labels = 0; /表示类别标签 class_count = 1; /表示类别的数量 delta = 0.0f; /表示Huber损失函数中的参数 clear(); /清除一些全局变量和已有的所有弱学习器 /GBT算法的学习 train(trainData, tflag, responses, varIdx, sampleIdx, varType, missingDataMask, _params, false);GBT算法的学习构建函数:bool train( const CvMat* _train_data, int _tflag, const CvMa

5、t* _responses, const CvMat* _var_idx, const CvMat* _sample_idx, const CvMat* _var_type, const CvMat* _missing_mask, CvGBTreesParams _params, bool /*_update*/ ) /update is not supported /_train_data表示样本数据集合 /_tflag表示样本矩阵的存储格式 /_responses表示样本的响应值 /_var_idx表示要用到的特征属性的索引 /_sample_idx表示要用到的样本的索引 /_var_ty

6、pe表示特征属性的类型,是连续值还是离散值 /_missing_mask表示缺失的特征属性的掩码 /_params表示构建GBT模型的一些必要参数 CvMemStorage* storage = 0; /开辟一块内存空间 params = _params; /构建GBT模型所需的参数 bool is_regression = problem_type(); /表示该GBT模型是否用于回归问题 /清空一些全局变量和已有的所有弱学习器 /* n - count of samples m - count of variables */ int n = _train_data-rows; /n表示训练

7、样本的数量 int m = _train_data-cols; /m表示样本的特征属性的数量 /如果参数_tflag为CV_ROW_SAMPLE,则表示训练样本以行的形式储存的,即_train_data矩阵的每一行为一个样本,那么n和m无需交换;否则如果_tflag为CV_COL_SAMPLE,则表示样本是以列的形式储存的,那么n和m就需要交换。总之,在后面的程序中,n表示训练样本的数量,m表示样本的特征属性的数量 if (_tflag != CV_ROW_SAMPLE) int tmp; CV_SWAP(n,m,tmp); / new_responses表示每个样本的伪响应值,因为构建GBT

8、决策树使用的是伪响应值 CvMat* new_responses = cvCreateMat( n, 1, CV_32F); cvZero(new_responses); /伪响应值初始为零 /实例化CvDTreeTrainData类,并通过该类内的set_data函数设置用于决策树的训练样本数据data data = new CvDTreeTrainData( _train_data, _tflag, new_responses, _var_idx, _sample_idx, _var_type, _missing_mask, _params, true, true ); if (_miss

9、ing_mask) /如果给出了缺失特征属性的掩码 missing = cvCreateMat(_missing_mask-rows, _missing_mask-cols, _missing_mask-type); /初始化missing cvCopy( _missing_mask, missing); /赋值_missing_mask给missing /初始化orig_response矩阵的大小,该变量表示样本的原始真实响应值 orig_response = cvCreateMat( 1, n, CV_32F ); /step表示样本响应值的步长 int step = (_response

10、s-cols _responses-rows) ? 1 :step / CV_ELEM_SIZE(_responses- /根据样本响应值_responses的数据类型,为orig_response赋值 switch (CV_MAT_TYPE(_responses-type) case CV_32FC1: /32位浮点型数据 for (int i=0; idata.fli = _responses-data.fli*step; ; break; case CV_32SC1: /32位整型数据 data.fli = (float) _responses-data.ii*step; default

11、: /其他数据类型报错 CV_Error(CV_StsUnmatchedFormats, Response should be a 32fC1 or 32sC1 vector.); if (!is_regression) /如果构建的GBT模型是用于分类问题 class_count = 0; /表示样本类别的数量 /为每个样本定义一个掩码,用于判断样本的类别 unsigned char * mask = new unsigned charn; memset(mask, 0, n); /掩码清零 / compute the count of different output classes +i

12、) /遍历所有样本,得到类别的数量 /如果当前样本的掩码没有被置1,则说明当前样本属于新的类别 maski) class_count+; /样本类别数加1 /判断当前样本以后的所有样本的响应值是否与当前样本的响应值相同,即是否属于同一类,如果是同一类,则把样本掩码置1,说明它不再是新的类别 for (int j=i; jdata.flj) = int(orig_response-data.fli) maskj = 1; delete mask; /删除mask变量 /初始化样本类别标签,并赋首地址指针 class_labels = cvCreateMat(1, class_count, CV_

13、32S); class_labels-data.i0 = int(orig_response-data.fl0); int j = 1; /表示所有样本类别标签的索引值 for (int i=1; +i) /遍历所有样本,为样本类别标签赋值 int k = 0; /表示已得到的样本类别标签的索引值 /while循环用于判断是否有新的类别标签出现。如果orig_response-data.fli等于class_labels-data.ik,说明当前样本的类别存在于已经得到的类别标签中,则退出while循环,继续for循环;如果kj,说明已经遍历完类别标签 while (int(orig_resp

14、onse-data.fli) - class_labels-data.ik) & (kdata.fli); j+; / inside gbt learning proccess only regression decision trees are built /GBT模型用到的是回归树,所以要把data-is_classifier赋值为false data-is_classifier = false; / preproccessing sample indices /如果_sample_idx不为0,需要预处理那些被指定使用的样本数据 if (_sample_idx) int sample_i

15、dx_len = get_len(_sample_idx); /被指定的要使用的样本数据的数量 switch (CV_MAT_TYPE(_sample_idx-type) /判断样本的数据类型 /32位整型 sample_idx = cvCreateMat( 1, sample_idx_len, CV_32S ); /初始化 /遍历指定的样本数据,赋值 sample_idx_len; sample_idx-data.ii = _sample_idx-data.ii; break; /8位有、无符号位的整型,8位样本数据存储在32位数据中,即每32位数据包括4个8位样本数据,以节省内存空间 ca

16、se CV_8S: case CV_8U: /变量active_samples_count表示8位样本数据需要多少个32位数据 int active_samples_count = 0; +i) /得到active_samples_count值 active_samples_count += int( _sample_idx-data.ptri ); sample_idx = cvCreateMat( 1, active_samples_count, CV_32S ); active_samples_count = 0; /为sample_idx赋值,赋的不是真正的样本值,而是索引值 if (

17、int( _sample_idx-data.ptri ) data.iactive_samples_count+ = i;_sample_idx should be a 32sC1, 8sC1 or 8uC1 vector. /按从小到大的顺序对样本数据进行排序存放,以便后续处理 icvSortFloat(sample_idx-data.fl, sample_idx_len, 0); else /全体样本数据都用于构建GBT模型 sample_idx = cvCreateMat( 1, n, CV_32S );data.ii = i; /赋样本的索引值 /初始化矩阵变量sum_response

18、和sum_response_tmp sum_response = cvCreateMat(class_count, n, CV_32F); sum_response_tmp = cvCreateMat(class_count, n, CV_32F); cvZero(sum_response); /sum_response矩阵清零 /Huber损失函数的参数赋值为0 in the case of a regression problem the initial guess (the zero term in the sum) is set to the mean of all the train

19、ing responses, that is the best constant model / base_value表示F0(x) /如果是回归问题,通过调用find_optimal_value函数得到F0(x),find_optimal_value函数详见后面的介绍 if (is_regression) base_value = find_optimal_value(sample_idx); in the case of a classification problem the initial guess (the zero term in the sum) is set to zero

20、for all the trees sequences /如果是分类问题,F0(x)设置为0 else base_value = 0.0f; current predicition on all training samples is set to be equal to the base_value cvSet( sum_response, cvScalar(base_value) ); /使sum_response等于base_value /初始化弱学习器weak,如果是回归问题,class_count为1,即一个弱学习器就是一个决策树;如果是分类问题,class_count为类别的数量,

21、即一个弱学习器是由class_count个决策树构成 weak = new pCvSeqclass_count; /初始化弱学习器 class_count; storage = cvCreateMemStorage(); weaki = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvDTree*), storage ); storage = 0; / subsample params and data rng = &cv:theRNG(); /实例化RNG类,用于得到随机数,以便随机选取训练样本数据 int samples_count = get_len(sa

22、mple_idx); /得到样本总数 /如果subsample_portion太接近0或太接近1,则subsample_portion重新赋值为1 params.subsample_portion = params.subsample_portion = FLT_EPSILON | 1 - params.subsample_portion = FLT_EPSILON ? params.subsample_portion; /得到训练样本的数量 int train_sample_count = cvFloor(params.subsample_portion * samples_count);

23、/ train_sample_count为0,则样本总数就是训练样本数量 if (train_sample_count = 0) train_sample_count = samples_count; int test_sample_count = samples_count - train_sample_count; /得到测试样本数量 /开辟一个大小为samples_count内存空间,idx_data指向该空间的首地址,该空间的前train_sample_count个单位存放着训练样本所对应的全体样本的索引值,后test_sample_count个单位存放着测试样本所对应的全体样本的索引值 int* idx_data = new intsamples_count; /初始化subsample_train subsample_train = cvCreateMatHeader( 1, train_sample_count, CV_32SC1 ); *subsample_train = cvMat( 1, train_sample_count, CV_32SC1, idx_data ); /初始化subsample_test if (test_sample_count) subsample_test = cvCreateMatHeader( 1, test_sam

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1