原创博客,转载请联系博主!

希望我思考问题的思路,也可以给大家一些启发或者反思!

问题背景:

现在我们的手上有一组没有明确规律,但是分布有明显聚簇现象的样本点,如下图所示:

图中数据集是显然是个3维的数据集,包括横纵坐标和色彩(高度),由于数据的分布比较不均匀,我们选择分布比较典型的[300,305)区间的数据点进行处理

我们的目的是找出这个数据空间中数据比较集中的部分,根据肉眼对样本的初步观察,这篇文章将讨论一个从横轴的维度对数据较密集的区域进行识别的一个轻量算法,其实也就是找出数据空间中的所谓“条状物”。

算法思路:

其实如果不限制处理数据的维度,那么一个更准确的算法思路是使用非圆形聚类算法对数据样本进行处理,经过实验结果也确实符合我们的想法。

在这里我们的思路是这样的:

1.首先使用核密度估计算法对样本区间进行一个直观的统计

2.对样本进行归一化

3.对处理后的样本做求导数(这里为了追求效率使用向后差分)

4.通过对样本的统计结果使用有限状态自动机进行扫描,得到一个记录的峰值的结果

这里为了客观衡量算法的效率和准确度我们使用一个 加速比 和 过滤比 作为标准。

过滤比:  =得到的“条状物”中的样本的个数/样本的全部个数

加速比:  =得到的“条状物”的横轴长度/整个样本横轴区间长度

由于核密度估计的核函数有很多种选择,包括高斯核,伽马核,三角核,矩形核等,我们这里选择相对比较平滑的高斯核核函数对样本进行核密度估计统计,而且带宽的选择也有两种一个是迭代计算的,结果拟合得比较真实准确但是速度比较慢,另一种是非迭代计算的,计算速度很快但是结果也过于“平滑”。如下图所示:

非迭代计算核密度估计:

迭代计算核密度估计:

时间消耗对比也非常明显:

所以我们处理的策略是: 用非迭代的核密度估计处理大区间的数据,当区间的长度小于一个阈值的时候,使用迭代的核密度估计对数据进行准确的拟合。

梳理下来总的思路可以用下图来表示:

1.对过大的区间进行等分成“足够小”的大区间

2.对分割后的区间进行递归的“统计+寻峰” (一个普通的递归处理,将起点放入peakStart数组中,终点放入peakEnd数组中)

自动机寻峰的思路是这样的:

在对样本进行归一化处理和差分求导之后,根据对样本的观察,我们大致了解了这个样本之中峰的大致的形状,由此人工地去设定三个阈值作为自动机寻峰算法的参数:

第一个参数是判断峰开始的斜率阈值

第二个参数是判断到达峰顶的斜率阈值

第三个参数是判断峰结束的斜率阈值

设定这三个阈值是为了防止数据中的快速抖动(平滑/“降噪“后也难以避免)导致自动状态的错误或者出现过多细碎的"小峰"的状况,如下图所示是自动机的状态转换图:

下图是一次自动机寻峰之后的处理结果:

以下是这个算法对几个不同的样本区间进行处理的结果plot图:

以及过滤比和加速比的结果:

实现代码(R实现):

由于项目中的一些其他原因,尽管这个算法表现不错,但最后也没有运用到项目中去,也就没有深入去做优化和修改。

想更细节了解欢迎联系我的邮箱或者评论!

java 波峰检测_轻量算法根据核密度估计检测波峰算法 ---基于有限状态自动机和递归实现...相关推荐

  1. 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...

    感兴趣区域.特定区域.框出移动物体的轮廓.越界检测.入侵物体检测.使用 opencv-python库的函数cv2.findContours.cv2.approxPolyDP.cv2.arcLength ...

  2. opencv 通过标定摄像头测量物体大小_激光三角测量法在工业视觉检测上的应用...

    来源:公众号|3D视觉工坊(系投稿) 作者:白杨 「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉.CV&深度学习.SLAM.三维重建.点云后处理.自动驾驶.C ...

  3. 首期「线上开发」直播出炉!轻量算法+轻量开发:AI 小白也能上手实操的一款图像分类器...

    几行代码,零基础AI小白也能上手开发图像分类器.5 月 16 日,早 9:30 直播等你,带你线上完成基于 TF2.2 的宠物分类器. 进入 AI 时代,想成为一名 AI 开发者却不是一件那么容易的事 ...

  4. 冒泡法java程序图片_正宗冒泡法-java语言实现

    冒泡法的思想就是:小的不停地"向前跑",大的不停地"向后"冒. 代码如下: public class Main { public static void mai ...

  5. java 象限分析_象限分析法

    象限分析法 象限分析法 对函数的图象.方程的图形的位置.形状.数量及关系特征进行分析,借助其在象限中的直观性粗线条式的解题,这种解题方法叫做象限分析法. 它是数形结合思想的具体运用. 例1.[1992 ...

  6. python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛.鼻子. ...

  7. javacv 人脸检测_使用JavaCV进行手和手指检测

    javacv 人脸检测 这篇文章是Andrew Davison博士发布的有关自然用户界面(NUI)系列的一部分,内容涉及使用JavaCV从网络摄像头视频提要中检测手. 注意:本章的所有源代码都可以从h ...

  8. 修改app绕过模拟器检测_双平台直连绕过手游检测机制,莱仕达P30手柄实测

    玩游戏,我们都不仅仅局限于手机本身的操作,追求极致的游戏体验,往往我们都在使用外设来使用,而市面上很多的游戏外设都会被游戏检测到外设模拟机玩家,而无法与手机触屏使用玩家一起玩假如你有手柄,跟你匹配的, ...

  9. 信用卡欺诈行为检测_在无监督学习的情况下检测欺诈行为

    信用卡欺诈行为检测 It's common to hear about fraudulent acts on e-commerce platforms. In recent years, the sp ...

最新文章

  1. 金蝶应收应付模块流程_金蝶KIS专业版应收应付的系统亮点功能
  2. Vue 中定义方法页面上使用
  3. 浅谈如何在C#Winform程序中正确使用登录窗体
  4. 阿里配管专家解读:如何最优成本搭建非标准的iOS构建集群
  5. 【SpringMVC 之应用篇】 2_SpringMVC 的传参问题
  6. php socket主动推送消息,PHP使用WebSocket主动推送【微信小程序接收】
  7. Unity3D-Rigidbody
  8. 了解OutOfMemoryError异常 - 深入Java虚拟机读后总结
  9. 让你更好的使用jQuery插件
  10. VB6.0鼠标注册详细教程
  11. jsx怎么往js里传参数_JSX详解
  12. Mac 屏幕录制 权限 没有可勾选或添加的App选项 产生原因和解决办法
  13. html引用资源相对路径,超链接中的绝对路径和相对路径
  14. CSS之background深度详解
  15. linux内核源码分析之proc文件系统(三)
  16. 你和语言模型,谁的填空能力更强?
  17. 【PhotoShop基础B篇】准确控制曝光
  18. 如何实现在直播中播放音频文件
  19. 自动化立体仓库使用流程!海格里斯自动化立体库流程:入库——出库——拣选
  20. 创新实验室实习生每周工作总结【实习第七周】

热门文章

  1. 【汇编】AT89C52点亮一盏LED灯(汇编语言)
  2. 如何拷贝草图图元到另一个草图
  3. 光伏并网逆变器资料包含原理图
  4. 附录I-1 体系结构设计报告
  5. 管理员已阻止你运行此应用有关详细信息请与管理员联系,怎么办,WIN10
  6. android sqlcipher github,android – sqlcipher_export没有导出我的表
  7. wincc版本升级_关于WINCC升级问题
  8. 迅闪2011客户端(0862)安装异常处理及注意事项
  9. “华为杯”研究生数学建模竞赛2020年-【华为杯】F题:飞行器质心平衡供油策略优化(附优秀论文及Python代码实现)
  10. 神经网络下采样、上采样——图文计算