原文链接:在opencv3中的机器学习算法练习:对OCR进行分类

本文贴出的代码为自己的训练集所用,作为参考。可运行demo程序请拜访原作者。

CNN作为图像识别和检测器,在分析物体结构分布的多类识别中具有绝对的优势。通多多层卷积核Pooling实现对物体表面分布的模板学习,以卷积核的形式存储在网络中。而对于统计特征,暂时没有明确的指导规则。

opencv3中的ml类与opencv2中发生了变化,下面列举opencv3的机器学习类方法实例,以随机森林为例。

代码:

 //使用OpenCV随机森林训练模型//使用训练好的样本-TXT文件int RTreesTrain( int argc, char* argv[] ){if (argc < 9) {std::cout << "argc<9";return 0;}std::string fileFeatureTrain(argv[1]);std::string  fileFeatureTest(argv[2]);std::string        fileTrees(argv[3]);int lenF   = atoi(argv[4]);//特征长度 32int numF = atoi(argv[5]);//使用特征个数 1000int nsample = atoi(argv[6]);//总样本数 大于numFint nTrees = atoi(argv[7]);int nClass = atoi(argv[8]);//载入特征cv::Mat data;cv::Mat responses;const string data_filename = fileFeatureTrain;read_num_class_data( data_filename, numF, lenF, &data, &responses );cv::Ptr<cv::ml::RTrees>  StyleModelHSV;StyleModelHSV = cv::ml::RTrees::create();StyleModelHSV->setMaxDepth(10);StyleModelHSV->setMinSampleCount(10);StyleModelHSV->setRegressionAccuracy(0);StyleModelHSV->setUseSurrogates(false);StyleModelHSV->setMaxCategories(nClass);StyleModelHSV->setPriors(cv::Mat());StyleModelHSV->setCalculateVarImportance(true);StyleModelHSV->setActiveVarCount(4);StyleModelHSV->setTermCriteria(TC(10000, 0.01f));int nsamples_all = nsample;// data.rows;int ntrain_samples = numF;// (int)(nsamples_all*0.8);cv::Ptr<cv::ml::TrainData> tdata = prepare_train_data(data, responses, ntrain_samples);cout << "The Model is training....." << endl;StyleModelHSV->train(tdata);StyleModelHSV->save(fileTrees);return 1;}
 // 读取文件数据bool read_num_class_data( const string& fileFeatureTrain, int numF,int fLen, cv::Mat* _data, cv::Mat* _responses){using namespace cv;Mat el_ptr(1, numF, CV_32F);vector<int>  responses(0);_data->release();_responses->release();freopen(fileFeatureTrain.c_str(), "r", stdin);cout << "The feature is loading....." << endl;int i = 0;int label = 0;for (int i = 0; i < numF; ++i) {StyleFeature  aFeat;aFeat.second.resize(fLen);std::string sline;getline(cin, sline);//以空格分开int idxBlank = sline.find_first_of(" ");std::string sLabel = sline;//获取标签;sLabel.erase(idxBlank, sLabel.length());responses.push_back(label);//aFeat.first = label = atoi(sLabel.c_str());std::string sFV = sline;sFV.erase(0, idxBlank + 1);//获取一行,特征int idxFv = 0;float fV = 0.0;while (sFV.length() > 0 && idxFv < fLen) {int idxColon = sFV.find_first_of(":");std::string sv = sFV;std::strstream ssv;sv = sv.substr(idxColon + 1, sv.find_first_of(" ") - 2);ssv << sv;ssv >> fV;el_ptr.at<float>(i) = fV;//aFeat.second[idxFv] = fV;++idxFv;sFV.erase(0, sFV.find_first_of(" ") + 1);}_data->push_back(el_ptr);//trainData.push_back(aFeat);}fclose(stdin); cout << "The feature load over....." << endl;Mat(responses).copyTo(*_responses);return true;}
 //准备训练数据cv::Ptr<cv::ml::TrainData> prepare_train_data( const cv::Mat& data, const cv::Mat& responses, int ntrain_samples ){using namespace cv;Mat sample_idx = Mat::zeros(1, data.rows, CV_8U);Mat train_samples = sample_idx.colRange(0, ntrain_samples);train_samples.setTo(Scalar::all(1));int nvars = data.cols;Mat var_type(nvars + 1, 1, CV_8U);var_type.setTo(Scalar::all(ml::VAR_ORDERED));var_type.at<uchar>(nvars) = ml::VAR_CATEGORICAL;return ml::TrainData::create(data, ml::ROW_SAMPLE, responses, noArray(), sample_idx, noArray(), var_type);}

样本结构:

0 1:211946 2:0 3:0 4:0 5:105 6:5693 7:34 8:0 9:0 10:0 11:25 12:12697 13:226916 14:1826 15:497 16:282 17:105 18:15 19:104 20:18 21:0 22:737 23:46979 24:17889 25:7121 26:6970 27:9441 28:12679 29:20890 30:37498 31:43568 32:27465
0 1:23544 2:210 3:11663 4:158 5:310 6:166 7:591 8:6131 9:193297 10:1985 11:1136 12:809 13:149069 14:33036 15:20045 16:11525 17:6552 18:2928 19:2590 20:1844 21:1305 22:11106 23:81817 24:29063 25:6654 26:5015 27:4916 28:8862 29:34762 30:44044 31:17409 32:7458
0 1:254596 2:0 3:65361 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:10 12:14033 13:333347 14:330 15:75 16:80 17:25 18:0 19:42 20:0 21:0 22:101 23:31990 24:66583 25:49191 26:59149 27:35800 28:25089 29:21463 30:18022 31:18409 32:8304
0 1:11697 2:2431 3:228 4:9 5:0 6:1 7:150 8:28 9:8413 10:9673 11:6345 12:6025 13:7695 14:8080 15:5689 16:6175 17:5146 18:4358 19:3246 20:2170 21:1478 22:963 23:2192 24:6866 25:7082 26:4273 27:3100 28:2733 29:2833 30:3265 31:3835 32:8821 

OpenCV:使用OpenCV3随机森林进行统计特征多类分析相关推荐

  1. R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度、使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异)

    R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度.使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异) 目录

  2. python随机森林变量重要性_随机森林如何评估特征重要性【机器学习面试题详解】...

    今天爱分享给大家带来随机森林如何评估特征重要性[机器学习面试题详解],希望能够帮助到大家. 解析: 衡量变量重要性的方法有两种,Decrease GINI 和 Decrease Accuracy: 1 ...

  3. Spark 和 Python.sklearn:使用随机森林计算 feature_importance 特征重要性

    前言 在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,本文以随机森林为例介绍其原理与实现.[ 链接:机器学习的特征重要性究竟是 ...

  4. 随机森林计算特征重要性_随机森林中计算特征重要性的3种方法

    随机森林计算特征重要性 The feature importance describes which features are relevant. It can help with a better ...

  5. 随机森林如何评估特征重要性

    序 集成学习模型的一大特点是可以输出特征重要性,特征重要性能够在一定程度上辅助我们对特征进行筛选,从而使得模型的鲁棒性更好. 随机森林中进行特征重要性的评估思想为: 判断每个特征在随机森林中的每颗树上 ...

  6. python随机森林筛选变量_一种基于随机森林的改进特征筛选算法

    刘云翔 陈斌 周子宜 摘  要: 肝癌是一种我国高发的消化系统恶性肿瘤,患者死亡率高,威胁极大.而其预后情况通常只能通过医生的专业知识和经验积累来粗略判断,准确率较差.因此文中在分析随机森林算法的基本 ...

  7. OpenCV:使用 随机森林与GBDT

    随机森林顾名思义,是用随机的方式建立一个森林.简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的.对于每棵树,它们使用的训练集是从总的训 ...

  8. sklearn随机森林展示各个特征权重

    核心代码 使用 feature_importances_可以提取随机森林的特征排序 rf_model.feature_importances_ 案例 创建数据: import pandas as pd ...

  9. 随机森林,随机森林中进行特征重要性

    随机森林(RF)简介 只要了解决策树的算法,那么随机森林是相当容易理解的.随机森林的算法可以用如下几个步骤概括: 用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集 用抽样得 ...

最新文章

  1. 【廖雪峰python进阶笔记】类的继承
  2. 如何在Linux下统计高速网络中的流量
  3. 局域网流量控制_基于软件定义的网络准入控制体系
  4. magento 报错及解决方法
  5. c语言计算a+aa+aaa_物业服务企业信用等级公布,42家获AAA级!你家小区物业怎么样?...
  6. React之JSX入门
  7. Gitlab自动触发Jenkins构建项目
  8. [APIO2013]机器人[搜索、斯坦纳树]
  9. 关于静态成员变量的谈论
  10. 很有用的SQLServer全局变量
  11. MySQL 按照拼音给中文字段排序
  12. 数学建模matlab视频教程,matlab编程教程_求matlab视频教程,主要用于数学建模方面的...
  13. 工业相机录像丢帧的解决方案
  14. 债券估值-零息债券、附息债券和永久债券
  15. FMI飞马网【线上直播】京东POP接口自动化测试
  16. 低学历者已无法生存 程序员尤其明显
  17. == 和equals的比较
  18. 医学统计学中RR、OR和HR三个关于比值的概念
  19. 不怕千招会,就怕一招精,学编程不要盲目跟风
  20. 安卓开发 之小白养成-Android适配

热门文章

  1. spark-submit使用及说明
  2. Python 学习日记 第四天
  3. 安防监控应用成LED企业新盈利点
  4. 详解MySQL中EXPLAIN解释命令
  5. 高斯滤镜模糊CSS3
  6. vim的巧用---对比操作
  7. 3/7 SELECT语句:过滤(WHERE)
  8. Windows 8 快捷键收集整理
  9. SQL 关于地图两个坐标点之间的距离运算
  10. PHP 多参数方法的重构