导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    最大期望算法

    技术交流
    1
    1
    3600
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • weijiz
      weijiz 最后由 编辑

      什么是最大期望算法

      在我们进行数据分析的时候经常会遇到这个的问题。我们有一系列的数据点,可以看出他们大致上属于不同的类别。比如下面的数据点。如何找到一种算法把这些点分类?

      0_1480936447212_ex8r_sm.png

      最大期望算法(Expectation Maximization algorithm )就是这样一种分类算法。

      0_1480936793260_ex8_sm.png

      原理

      原理上也是十分的简单的。对于一个随机过程来说,一般数据分布都是一个高斯分布。所以我们就可以假设这样的数据是几个高斯分布叠加出来的结果。下面只要通过一定的方法找到这些高斯分布的参数就可以了。为什么叫做最大期望呢?因为找到的分布是最有可能的产生这样的数据结果的分布。具体找参数的方法我就不介绍了,可以详细看这里

      如何在opencv里面使用最大期望算法

      在opencv中已经实现了EM算法,所以我们可以直接使用,官方文档
      这里是opencv官方给的sample code

      下面是我写的更简单一些的sample code。作用是对三维空间中的点进行归类。

        cv::Mat framePos = cv::Mat( vpKF.size(), 3, sizeof(float));
        for(size_t it = 0; it < vpKF.size(); it ++){
          framePos.at<float>(it * 3) = 0; // 构造数据
          framePos.at<float>(it * 3 + 1) = 0;
          framePos.at<float>(it * 3 + 2) = 0;
        }
      
        // 所有点的坐标信息都已经存入framePos
        cv::EM em = cv::EM(); // 创建一个EM对象
        cv::Mat labels;
        cv::Mat pos = cv::Mat( 1, 3, sizeof(float)); // pos是需要进行判断分类的点
        // 开始训练数据
        em.train( framePos, cv::noArray(), labels, cv::noArray() );
        // 开始判断分类
        em.predict(pos, cv::noArray())[1]; // 返回值就是分类
      
      1 条回复 最后回复 回复 引用 0
      • 1 / 1
      • First post
        Last post
      Copyright © 2015-2023 BlueWhale community