在opencv3.0中,提供了一个ml.cpp的文件,这里面全是机器学习的算法,共提供了这么几种:

1、正态贝叶斯:normal Bayessian classifier    我已在另外一篇博文中介绍过:在opencv3中实现机器学习之:利用正态贝叶斯分类

2、K最近邻:k nearest neighbors classifier

3、支持向量机:support vectors machine    请参考我的另外一篇博客:在opencv3中实现机器学习之:利用svm(支持向量机)分类

4、决策树: decision tree

5、ADA Boost:adaboost

6、梯度提升决策树:gradient boosted trees

7、随机森林:random forest

8、人工神经网络:artificial neural networks

9、EM算法:expectation-maximization

这些算法在任何一本机器学习书本上都可以介绍过,他们大致的分类过程都很相似,主要分为三个环节:

一、收集样本数据sampleData

二、训练分类器mode

三、对测试数据testData进行预测

不同的地方就是在opencv中的参数设定,假设训练数据为trainingDataMat,且已经标注好labelsMat。待测数据为testMat.

1、正态贝叶斯

 // 创建贝叶斯分类器Ptr<NormalBayesClassifier> model=NormalBayesClassifier::create();// 设置训练数据Ptr<TrainData> tData =TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);//训练分类器model->train(tData);
//预测数据float response = model->predict(testMat); 

2、K最近邻

 Ptr<KNearest> knn = KNearest::create();  //创建knn分类器knn->setDefaultK(K);    //设定k值knn->setIsClassifier(true);// 设置训练数据Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);knn->train(tData);float response = knn->predict(testMat);

3、支持向量机

Ptr<SVM> svm = SVM::create();    //创建一个分类器svm->setType(SVM::C_SVC);    //设置svm类型svm->setKernel(SVM::POLY); //设置核函数;svm->setDegree(0.5);svm->setGamma(1);svm->setCoef0(1);svm->setNu(0.5);svm->setP(0);svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 1000, 0.01));svm->setC(C);Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);svm->train(tData);float response = svm->predict(testMat);

4、决策树: decision tree

Ptr<DTrees> dtree = DTrees::create();  //创建分类器dtree->setMaxDepth(8);   //设置最大深度dtree->setMinSampleCount(2);  dtree->setUseSurrogates(false);dtree->setCVFolds(0); //交叉验证dtree->setUse1SERule(false);dtree->setTruncatePrunedTree(false);Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);dtree->train(tData);float response = dtree->predict(testMat);

5、ADA Boost:adaboost

 Ptr<Boost> boost = Boost::create();boost->setBoostType(Boost::DISCRETE);boost->setWeakCount(100);boost->setWeightTrimRate(0.95);boost->setMaxDepth(2);boost->setUseSurrogates(false);boost->setPriors(Mat());Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);boost->train(tData);float response = boost->predict(testMat);

6、梯度提升决策树:gradient boosted trees

此算法在opencv3.0中被注释掉了,原因未知,因此此处提供一个老版本的算法。

GBTrees::Params params( GBTrees::DEVIANCE_LOSS, // loss_function_type100, // weak_count0.1f, // shrinkage1.0f, // subsample_portion2, // max_depthfalse // use_surrogates )
                         );Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);Ptr<GBTrees> gbtrees = StatModel::train<GBTrees>(tData, params);float response = gbtrees->predict(testMat);

7、随机森林:random forest

   Ptr<RTrees> rtrees = RTrees::create();rtrees->setMaxDepth(4);rtrees->setMinSampleCount(2);rtrees->setRegressionAccuracy(0.f);rtrees->setUseSurrogates(false);rtrees->setMaxCategories(16);rtrees->setPriors(Mat());rtrees->setCalculateVarImportance(false);rtrees->setActiveVarCount(1);rtrees->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 5, 0));Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);rtrees->train(tData);float response = rtrees->predict(testMat);

8、人工神经网络:artificial neural networks

 Ptr<ANN_MLP> ann = ANN_MLP::create();ann->setLayerSizes(layer_sizes);ann->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1, 1);ann->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 300, FLT_EPSILON));ann->setTrainMethod(ANN_MLP::BACKPROP, 0.001);Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);ann->train(tData);float response = ann->predict(testMat);

9、EM算法:expectation-maximization

EM算法与前面的稍微有点不同,它需要创建很多个model,将trainingDataMat分成很多个modelSamples,每个modelSamples训练出一个model

训练核心代码为:

 int nmodels = (int)labelsMat.size();vector<Ptr<EM> > em_models(nmodels);Mat modelSamples;for( i = 0; i < nmodels; i++ ){const int componentCount = 3;modelSamples.release();for (j = 0; j < labelsMat.rows; j++){if (labelsMat.at<int>(j,0)== i)modelSamples.push_back(trainingDataMat.row(j));}// learn modelsif( !modelSamples.empty() ){Ptr<EM> em = EM::create();em->setClustersNumber(componentCount);em->setCovarianceMatrixType(EM::COV_MAT_DIAGONAL);em->trainEM(modelSamples, noArray(), noArray(), noArray());em_models[i] = em;}}

预测:

 Mat logLikelihoods(1, nmodels, CV_64FC1, Scalar(-DBL_MAX));for( i = 0; i < nmodels; i++ ){if( !em_models[i].empty() )logLikelihoods.at<double>(i) = em_models[i]->predict2(testMat, noArray())[0];}

这么多的机器学习算法,在实际用途中照我的理解其实只需要掌握svm算法就可以了。

ANN算法在opencv中也叫多层感知机,因此在训练的时候,需要分多层。

EM算法需要为每一类创建一个model。

其中一些算法的具体代码练习:在opencv3中的机器学习算法练习:对OCR进行分类

在opencv3中的机器学习算法相关推荐

  1. 【干货】推荐系统中的机器学习算法与评估实战

    [导读]推荐系统是机器学习技术在企业中最成功和最广泛的应用之一.本文作者结合MLMU演讲[1]的Slides,对推荐系统的算法.评估和冷启动解决方案做了详细的介绍. 作者 | Pavel Kordík ...

  2. 苹果新产品中的机器学习算法

    文 | PRANAV DAR 翻译 & 编辑 | strongnine 原文:How Machine Learning Algorithms & Hardware Power Appl ...

  3. 在opencv3中实现机器学习之:利用逻辑斯谛回归(logistic regression)分类

    logistic regression,注意这个单词logistic ,并不是逻辑(logic)的意思,音译过来应该是逻辑斯谛回归,或者直接叫logistic回归,并不是什么逻辑回归.大部分人都叫成逻 ...

  4. 在opencv3中实现机器学习之:利用svm(支持向量机)分类

    svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "s ...

  5. 「收藏」人工智能中常见机器学习算法优缺点有哪些?

    https://www.toutiao.com/a6706432431647359491/ 2019-06-25 19:43:14 朴素贝叶斯: 1. 如果给出的特征向量长度可能不同,这是需要归一化为 ...

  6. Python机器学习:KNN算法02scikit-learn中的机器学习算法封装

    学习scikit-learn中的knn使用 并自己实现一个封装 学习scikit-learn中的knn使用 ps:代码块加标题会让字变红 python 首先引入库 在这里插入代码片 #在这个库里面所有 ...

  7. 大数据分析人工智能中机器学习算法有哪些

    术语机器学习常常被错误互换与人工智能.实际上,机器学习是AI的一个子领域.机器学习有时也与预测分析或预测建模相混淆.同样,机器学习可用于预测建模,但这只是预测分析的一种类型,其用途比预测建模更广泛. ...

  8. SAP战略中的机器学习

    SAP战略中的机器学习 https://mp.weixin.qq.com/s/buv3R6AEr5PWhjpniYh_BQ 作者曾介绍过SAP将智能企业愿景推向市场的原因,以及帮助企业应对数字化挑战. ...

  9. 自动驾驶中的机器学习

    出品:CSDN(ID:CSDNnews) 作者:Denis Chikurtev 译者:马超     责编:晋兆雨 以下为译文: 近年来,自动驾驶技术技术的发展速度非常快.预计达到完全自动驾驶L5的程度 ...

最新文章

  1. mysql 索引 死锁,由不同的索引更新解决MySQL死锁套路
  2. 基于visual Studio2013解决面试题之0209最大堆排序
  3. jquery 3D分页翻转滑块
  4. 主题简介 ASP .NET
  5. 导入Excel表里的数据时产生【定义了过多字段】,但有时又是成功的
  6. leetcode(1)---两数之和
  7. 微信公众号怎么给微店设置运费
  8. 干货|219个opencv常用函数汇总
  9. 笑着学会Linux 系统之故障排查
  10. linux网络编程之:UDP数据包格式
  11. MATLAB画柱状图(包括普通柱状图,多组柱状图,三维柱状图)
  12. 解决80端口被svchost.exe进程占用的问题
  13. Spring控制反转(IOC)之注解配置
  14. 云服务器维护包含哪些,云服务器维护内容
  15. ios13 微信提示音插件_教大家苹果ios13系统怎么改微信提示音的方法
  16. VS配置永久OpenCV(小萌轻松操作):超细致
  17. 联想拯救者Y7000P触摸板无法使用
  18. Java如何实现定时任务——从某一天起每天定点执行
  19. Increasing trend of scientists to switch between topics论文翻译
  20. Kubernetes资源清单和Pod生命周期

热门文章

  1. 20210503:力扣第239周周赛题解
  2. 20200908:链表类题目集合上
  3. 20190925:(经典算法系列)河内之塔
  4. mysql 临时表循环_在游标循环中查询临时表可以,但是结束循环后就无法查询了。...
  5. vb 开机到现在的时间
  6. vb ClipBoard 剪切板应用(复制剪切粘贴)
  7. Linux、UNIX下磁带机的管理和使用
  8. 北京公交将标配智能辅助驾驶,具备行人防撞、车道偏离预警
  9. 腾讯下一步:关注通用AI,加大投入产业互联网,推出医疗新品AI显微镜
  10. DeepMind和Unity合作,创建虚拟世界来训练AI