返回顶部
首页 > 资讯 > 后端开发 > Python >python opencv3机器学习之EM算法怎么使用
  • 138
分享到

python opencv3机器学习之EM算法怎么使用

2023-07-02 14:07:31 138人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

今天小编给大家分享一下python OpenCV3机器学习之EM算法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解

今天小编给大家分享一下python OpenCV3机器学习之EM算法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

引言

不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注。相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计。也能得到每个样本对应的标注值,类似于kmeans聚类(输入样本数据,输出样本数据的标注)。实际上,高斯混和模型GMM和kmeans都是EM算法的应用。

在opencv3.0中,EM算法的函数是trainEM,函数原型为:

bool trainEM(InputArray samples, OutputArray logLikelihoods=noArray(),OutputArray labels=noArray(),OutputArray probs=noArray())

四个参数:

 samples: 输入的样本,一个单通道的矩阵。从这个样本中,进行高斯混和模型估计。

logLikelihoods: 可选项,输出一个矩阵,里面包含每个样本的似然对数值。

labels: 可选项,输出每个样本对应的标注。

probs: 可选项,输出一个矩阵,里面包含每个隐性变量的后验概率

这个函数没有输入参数的初始化值,是因为它会自动执行kmeans算法,将kmeans算法得到的结果作为参数初始化。

这个trainEM函数实际把E步骤和M步骤都包含进去了,我们也可以对两个步骤分开执行,OPENCV3.0中也提供了分别执行的函数:

bool trainE(InputArray samples, InputArray means0,                        InputArray covs0=noArray(),                        InputArray weights0=noArray(),                        OutputArray logLikelihoods=noArray(),                        OutputArray labels=noArray(),                        OutputArray probs=noArray())
bool trainM(InputArray samples, InputArray probs0,                        OutputArray logLikelihoods=noArray(),                        OutputArray labels=noArray(),                        OutputArray probs=noArray())

 trainEM函数的功能和kmeans差不多,都是实现自动聚类,输出每个样本对应的标注值。但它比kmeans还多出一个功能,就是它还能起到训练分类器的作用,用于后续新样本的预测。

预测函数原型为:

Vec2d predict2(InputArray sample, OutputArray probs) const

sample: 待测样本

probs : 和上面一样,一个可选的输出值,包含每个隐性变量的后验概率

返回一个Vec2d类型的数,包括两个元素的double向量,第一个元素为样本的似然对数值,第二个元素为最大可能混和分量的索引值。

在本文中,我们用两个实例来学习opencv中的EM算法的应用。

一、opencv3.0中自带的例子

既包括聚类trianEM,也包括预测predict2

代码:

#include "stdafx.h"#include "opencv2/opencv.hpp"#include <iOStream>using namespace std;using namespace cv;using namespace cv::ml;//使用EM算法实现样本的聚类及预测int main(){    const int N = 4;    //分成4类    const int N1 = (int)sqrt((double)N);    //定义四种颜色,每一类用一种颜色表示    const Scalar colors[] =    {        Scalar(0, 0, 255), Scalar(0, 255, 0),        Scalar(0, 255, 255), Scalar(255, 255, 0)    };    int i, j;    int nsamples = 100;   //100个样本点    Mat samples(nsamples, 2, CV_32FC1);  //样本矩阵,100行2列,即100个坐标点        Mat img = Mat::zeros(Size(500, 500), CV_8UC3);  //待测数据,每一个坐标点为一个待测数据    samples = samples.reshape(2, 0);    //循环生成四个类别样本数据,共样本100个,每类样本25个    for (i = 0; i < N; i++)    {        Mat samples_part = samples.rowRange(i*nsamples / N, (i + 1)*nsamples / N);        //设置均值        Scalar mean(((i%N1) + 1)*img.rows / (N1 + 1),            ((i / N1) + 1)*img.rows / (N1 + 1));        //设置标准差        Scalar sigma(30, 30);        randn(samples_part, mean, sigma);  //根据均值和标准差,随机生成25个正态分布坐标点作为样本    }    samples = samples.reshape(1, 0);    // 训练分类器    Mat labels;  //标注,不需要事先知道    Ptr<EM> em_model = EM::create();    em_model->setClustersNumber(N);    em_model->setCovarianceMatrixType(EM::COV_MAT_SPHERICAL);    em_model->setTermCriteria(TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 300, 0.1));    em_model->trainEM(samples, noArray(), labels, noArray());    //对每个坐标点进行分类,并根据类别用不同的颜色画出    Mat sample(1, 2, CV_32FC1);    for (i = 0; i < img.rows; i++)    {        for (j = 0; j < img.cols; j++)        {            sample.at<float>(0) = (float)j;            sample.at<float>(1) = (float)i;            //predict2返回的是double值,用cvRound进行四舍五入得到整型            //此处返回的是两个值Vec2d,取第二个值作为样本标注            int response = cvRound(em_model->predict2(sample, noArray())[1]);            Scalar c = colors[response];  //为不同类别设定颜色            circle(img, Point(j, i), 1, c*0.75, FILLED);        }    }    //画出样本点    for (i = 0; i < nsamples; i++)    {        Point pt(cvRound(samples.at<float>(i, 0)), cvRound(samples.at<float>(i, 1)));        circle(img, pt, 2, colors[labels.at<int>(i)], FILLED);    }    imshow("EM聚类结果", img);    waiTKEy(0);    return 0;}

结果:

python opencv3机器学习之EM算法怎么使用

二、trainEM实现自动聚类进行图片目标检测

只用trainEM实现自动聚类功能,进行图片中的目标检测

代码:

#include "stdafx.h"#include "opencv2/opencv.hpp"#include &lt;iostream&gt;using namespace std;using namespace cv;using namespace cv::ml;int main(){    const int MAX_CLUSTERS = 5;    Vec3b colorTab[] =    {        Vec3b(0, 0, 255),        Vec3b(0, 255, 0),        Vec3b(255, 100, 100),        Vec3b(255, 0, 255),        Vec3b(0, 255, 255)    };    Mat data, labels;    Mat pic = imread("d:/woman.png");    for (int i = 0; i &lt; pic.rows; i++)    for (int j = 0; j &lt; pic.cols; j++)    {        Vec3b point = pic.at&lt;Vec3b&gt;(i, j);        Mat tmp = (Mat_&lt;float&gt;(1, 3) &lt;&lt; point[0], point[1], point[2]);        data.push_back(tmp);    }    int N =3;  //聚成3类    Ptr&lt;EM&gt; em_model = EM::create();    em_model-&gt;setClustersNumber(N);    em_model-&gt;setCovarianceMatrixType(EM::COV_MAT_SPHERICAL);    em_model-&gt;setTermCriteria(TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 300, 0.1));    em_model-&gt;trainEM(data, noArray(), labels, noArray());    int n = 0;    //显示聚类结果,不同的类别用不同的颜色显示    for (int i = 0; i &lt; pic.rows; i++)    for (int j = 0; j &lt; pic.cols; j++)    {        int clusterIdx = labels.at&lt;int&gt;(n);        pic.at&lt;Vec3b&gt;(i, j) = colorTab[clusterIdx];        n++;    }    imshow("pic", pic);    waitKey(0);    return 0;}

测试图片

python opencv3机器学习之EM算法怎么使用

测试结果:

python opencv3机器学习之EM算法怎么使用

以上就是“Python opencv3机器学习之EM算法怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

--结束END--

本文标题: python opencv3机器学习之EM算法怎么使用

本文链接: https://lsjlt.com/news/342355.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python opencv3机器学习之EM算法怎么使用
    今天小编给大家分享一下python opencv3机器学习之EM算法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-02
  • opencv3机器学习之EM算法示例详解
    目录引言一、opencv3.0中自带的例子二、trainEM实现自动聚类进行图片目标检测引言 不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注...
    99+
    2024-04-02
  • Python机器学习之AdaBoost算法
    目录一、算法概述二、算法原理三、算法步骤四、算法实现五、算法优化一、算法概述 AdaBoost 是英文 Adaptive Boosting(自适应增强)的缩写,由 Yoav Freund 和Robert S...
    99+
    2022-06-02
    Python AdaBoost算法 Python机器学习
  • 【大道至简】机器学习算法之EM算法(Expectation Maximization Algorithm)详解(附代码)---通俗理解EM算法。
    ☕️ 本文来自专栏:大道至简之机器学习系列专栏 🍃本专栏往期文章:逻辑回归(Logistic Regression)详解(附代码)---大道至简之机器学习算法系列——非常通俗易懂!_尚拙谨言的博客-CSDN博客_逻...
    99+
    2023-09-26
    python 机器学习 EM算法 算法 人工智能 自然语言处理
  • Python机器学习之Kmeans基础算法
    一、K-means基础算法简介 k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无...
    99+
    2022-06-02
    Python Kmeans基础算法 python机器学习 python Kmeans
  • Python机器学习之KNN近邻算法
    目录一、KNN概述二、使用Python导入数据三、numpy.array()四、实施KNN分类算法五、计算已知类别数据集中的点与当前点之间的距离六、完整代码七、数据处理、分析、测试八...
    99+
    2024-04-02
  • Python机器学习入门(五)之Python算法审查
    目录1.审查分类算法1.1线性算法审查1.1.1逻辑回归1.1.2线性判别分析1.2非线性算法审查1.2.1K近邻算法1.2.2贝叶斯分类器1.2.3分类与回归树1.2.4支持向量机...
    99+
    2024-04-02
  • Python机器学习之PCA降维算法详解
    目录一、算法概述二、算法步骤三、相关概念四、算法优缺点五、算法实现六、算法优化一、算法概述 主成分分析 (Principal ComponentAnalysis,PCA)是一种掌握事物主要矛盾的统计分析方法...
    99+
    2022-06-02
    Python PCA降维算法 python机器学习
  • 机器学习之决策树算法怎么实现
    决策树是一种常用的机器学习算法,主要用于分类和回归问题。下面是决策树算法的实现步骤:1. 数据预处理:将原始数据进行清洗和转换,包括...
    99+
    2023-10-11
    机器学习
  • Python机器学习之AdaBoost算法的示例分析
    这篇文章将为大家详细讲解有关Python机器学习之AdaBoost算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、算法概述AdaBoost 是英文 Adaptive Boosting(自适...
    99+
    2023-06-15
  • Python机器学习k-近邻算法怎么实现
    这篇文章主要介绍“Python机器学习k-近邻算法怎么实现”,在日常操作中,相信很多人在Python机器学习k-近邻算法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python机器学习k-近邻算法怎...
    99+
    2023-06-21
  • 【python】机器学习-K-近邻(KNN)算法
             目录 一 . K-近邻算法(KNN)概述  二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法(KNN)概述          K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之...
    99+
    2023-10-22
    python matlab 机器学习 算法
  • Python机器学习之PCA降维算法的示例分析
    小编给大家分享一下Python机器学习之PCA降维算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、算法概述主成分分析 (Principal Com...
    99+
    2023-06-15
  • Python机器学习实战之k-近邻算法的实现
    目录K-近邻算法概述工作原理实施KNN算法示例:手写识别系统K-近邻算法概述 简单地说, k-近邻算法采用测量不同特征值之间的距离方法进行分类。 k-近邻算法 优点:精度高...
    99+
    2024-04-02
  • Python机器学习算法之决策树算法的实现与优缺点
    目录1.算法概述2.算法种类3.算法示例4.决策树构建示例5.算法实现步骤 6.算法相关概念7.算法实现代码8.算法优缺点9.算法优化总结1.算法概述 决策树算法是在已知各...
    99+
    2024-04-02
  • python机器学习工具pyCaret怎么使用
    这篇文章主要介绍“python机器学习工具pyCaret怎么使用”,在日常操作中,相信很多人在python机器学习工具pyCaret怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python机器学习工...
    99+
    2023-06-25
  • Python实现机器学习算法的分类
    Python算法的分类 对葡萄酒数据集进行测试,由于数据集是多分类且数据的样本分布不平衡,所以直接对数据测试,效果不理想。所以使用SMOTE过采样对数据进行处理,对数据去重,去空,处...
    99+
    2024-04-02
  • python离散建模之感知器学习算法
    我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易实现,但为了节省时间,我在下面为您提供了一个实现。该函数有几个...
    99+
    2024-04-02
  • Python语法学习之正则表达式怎么使用
    这篇文章主要介绍“Python语法学习之正则表达式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python语法学习之正则表达式怎么使用”文章能帮助大家解决问题。要想成功的进行字符串的匹配需...
    99+
    2023-06-30
  • 怎么用Python开启机器学习
    本篇内容主要讲解“怎么用Python开启机器学习”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python开启机器学习”吧!随着行业内机器学习的崛起,能够帮用户快速迭代整个过程的工具变得至...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作