算法分析与应用解决(GMM算法、非线性拟合、降维(PCA)方法),记录

news2024/11/24 13:53:37

1、目的

项目具体不便透露,主要记录方法的理解与使用。
数据分析工具见上一篇博客
https://blog.csdn.net/qq_36212935/article/details/130849333

2、背景

数据分析,FSC、SSC、SFL数据直方图如下:
在这里插入图片描述
发现SFL数据呈一定“高斯”分布图像,具体数据直方图如下:
在这里插入图片描述
简要理解为:
a>左边“频数”高的,数值低的为杂点,即噪声数据,影响项目最终结果;
b>右边是想得到的数据,但杂点处也包含了得到的数据,如何有效的分离杂点和有效数据是本文需研究的内容,即有效数据的大小应该是多少。

3、方法

(1)GMM方法

python调用相关库实现GaussianMixture算法(简称GMM算法),实现GMM算法聚团分类图像如下:
在这里插入图片描述
这里选用8个高斯混合而成,杂点处被分类为同一标签,根据给定数据的每个组件的后验概率求得除杂点外的总后验概率之和,图形如下:
在这里插入图片描述
数据结果如下:(左为原始数据重复性,右为GMM算法过滤后的数据重复性)
在这里插入图片描述
可以看到有效数据(粒子数)变得更小且更稳定,即CV值更低。

(2)非线性拟合方法

非线性拟合方法主要涉及到有效数据混合高斯分布的拟合,其拟合需要的参数值(即a峰值、b横坐标、c标准差)用LM算法求最小值得到。LM算法涉及到雅克比矩阵,黑塞矩阵等概念的应用,代价函数的选取等。最终希望得到一个“较好”的高斯分布函数。如下是2个高斯的部分代码,调用eigen库函数实现:

    int ngauss = 2;
    Eigen::VectorXd x_init(ngauss * 3);
    x_init.setOnes();
    x_init *= 50; 
    x_init(0) = 151; 
    x_init(1) = 52; 
    x_init(2) = 32; 
    x_init(3) = 149; 
    x_init(4) = 56; 
    x_init(5) = 31;
    DiGaussFunctor functor(ngauss, &input);
    Eigen::LevenbergMarquardt<DiGaussFunctor> lmSolver(functor);
    Eigen::LevenbergMarquardtSpace::Status status = lmSolver.minimize(x_init);

eigen库用法见:

https://zhuanlan.zhihu.com/p/414383770

最终拟合后的图形如下:
在这里插入图片描述
最后,根据此有效数据的高斯分布规律来选取有效数据粒子数。
a>第一种想法是,直方图波谷位置右侧数据直接保留,左侧数据根据高斯分布与原杂点数据差的比值,按0-1的随机数的概率,来选取杂点处的数据作为有效数据,概率小于比值即是有效数据,否则不是。
b、第二种想法是,右侧不变,左侧的粒子数选取根据面积来判断。根据梯形法则求高斯分布的面积,左侧面积比上右侧面积乘以右侧有效粒子数即为左侧该选取的杂点粒子数。
梯形法则见:

https://zhuanlan.zhihu.com/p/629972534#:~:text=%E6%A2%AF%E5%BD%A2%E6%B3%95%E5%88%99%E6%98%AF%E4%B8%80%E7%A7%8D%E6%95%B0%E5%80%BC%E7%A7%AF%E5%88%86%E6%96%B9%E6%B3%95%EF%BC%8C%E7%94%A8%E4%BA%8E%E4%BC%B0%E8%AE%A1%E5%AE%9A%E7%A7%AF%E5%88%86%E7%9A%84%E5%80%BC%E3%80%82%20%E5%AE%83%E5%9F%BA%E4%BA%8E%E5%B0%86%E5%AE%9A%E7%A7%AF%E5%88%86%E7%9A%84%E5%8C%BA%E9%97%B4%20%E5%88%86%E5%89%B2%E6%88%90%E8%8B%A5%E5%B9%B2%E4%B8%AA%E5%B0%8F%E6%A2%AF%E5%BD%A2%20%EF%BC%8C%E4%BB%A5%E9%80%BC%E8%BF%91%E6%9B%B2%E7%BA%BF%E4%B8%8B%E9%9D%A2%E7%A7%AF%EF%BC%8C%E4%BB%8E%E8%80%8C%E5%BE%97%E5%88%B0%E5%AE%9A%E7%A7%AF%E5%88%86%E7%9A%84%E8%BF%91%E4%BC%BC%E5%80%BC%E3%80%82,%E5%85%B7%E4%BD%93%E5%9C%B0%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%86%E7%A7%AF%E5%88%86%E5%8C%BA%E9%97%B4%20%5Ba%2C%20b%5D%E7%AD%89%E5%88%86%E6%88%90n%E7%AD%89%E4%BB%BD%EF%BC%8C%E6%AF%8F%E4%B8%80%E4%BB%BD%E9%95%BF%E5%BA%A6%E4%B8%BAh%3D%20%28b-a%29%2Fn%E3%80%82

(3)降维方法+非线性方法

由于非线性拟合使用的数据是单一SFL数据,而最终结果是要使用FSC、SFL上的数据,考虑一种降维方法,保留FSC和SFL上的数据信息,即主成分分析方法PCA,其实现原理见:

https://zhuanlan.zhihu.com/p/37777074

实现步骤为:

1、去中心化;
2、计算协方差矩阵;
3、特征值分解方法求协方差矩阵的特征值与特征向量;
即:
    Eigen::EigenSolver<Eigen::Matrix2d> es(sigma);
    Eigen::Matrix2d D = es.pseudoEigenvalueMatrix(); //特征值
    Eigen::Matrix2d V = es.pseudoEigenvectors();//特征向量
4、特征值从大到小排序,选择其中最大的k个;
5、将数据转换到k个特征向量构建的新空间中。

其相关值为:
在这里插入图片描述

后续还是使用第二种的非线性拟合方法,此时需要注意,降维数据的改变需修改拟合的高斯个数,初始值等,以达到最优的高斯分布。
其结果图如下:
在这里插入图片描述
黑色线表示降维数据、绿色线表示SFL单一数据,红色线表示拟合降维数据的高斯分布。降维数据相比SFL数据整体减小,直方图左移。由于降维数据包含更多信息,PLT粒子数更符合“高斯”分布规律,所以使用2个高斯就非常好的拟合出右侧PLT粒子的分布规律。降维数据和拟合高斯分布如下所示:
在这里插入图片描述
二者对比结果如下:
在这里插入图片描述

4、总结

三种方法的预研,得到最终数据的对比结果,如下表所示:
在这里插入图片描述
老方法直线过滤不适用,结果最好的是降维方法加上非线性拟合方法的数据结果,杂点选取方法采用面积比例的方法,数据稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中 组件间的通信

目录 引入 父组件>子组件 子组件>父组件 全局事件总线 消息订阅与发布 引入 你知道Vue中组件之间应该如何进行通信吗&#xff1f;这里面就涉及到了多个关系了&#xff0c;父子之间互传、兄弟之间互传、子孙之间互传&#xff0c;甚至是任意的组件之间传递...... 是不…

Python基础教程: json序列化详细用法介绍

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 Python内置的json模块提供了非常完善的对象到JSON格式的转换。 废话不多说&#xff0c;我们先看看如何把Python对象变成一个JSON&#xff1a; d dict(nameKaven, age17, sexMale) print(json.dumps(d)) # {"na…

C++:模拟实现list

文章目录 迭代器模拟实现 本篇模拟实现简单的list和一些其他注意的点 迭代器 如下所示是利用拷贝构造将一个链表中的数据挪动到另外一个链表中&#xff0c;构造两个相同的链表 list(const list<T>& lt) {emptyinit();for (auto e : lt){push_back(e);} }void test_…

【swagger2】swagger2配置显示及修改描述

需求描述 项目接口文档使用yapi来进行管理,原来的controller仅使用了一个@Api的注解,且注解的描述是controller类名,添加@ApiOperation、@ApiModel和@ApiModelProperty后,第一次生成接口-接口列表下的分组是现在@Api配置的名称,业务和产品要看这个接口,显示controller类…

R语言生存分析(机器学习)(2)——Enet(弹性网络)

弹性网络&#xff08;Elastic Net&#xff09;:是一种用于回归分析的统计方法&#xff0c;它是岭回归&#xff08;Ridge Regression&#xff09;和lasso回归&#xff08;Lasso Regression&#xff09;的结合&#xff0c;旨在克服它们各自的一些限制。弹性网络能够同时考虑L1正则…

解析TCP/IP协议的分层模型:探寻网络通信的精髓

了解ISO模型&#xff1a;构建通信的蓝图 为了促进网络应用的普及&#xff0c;国际标准化组织&#xff08;ISO&#xff09;引入了开放式系统互联&#xff08;Open System Interconnect&#xff0c;OSI&#xff09;模型。这个模型包括了七个层次&#xff0c;从底层的物理连接到顶…

图像变形之移动最小二乘算法(MLS)

基本原理 基于移动最小二乘的图像变形是通过一组源控制点和目标控制点来控制变形&#xff0c;对于每一个待求变形后位置的点而言&#xff0c;根据预设的形变类型&#xff08;如仿射变换、相似变换、刚性变换&#xff09;求解一个最小二乘优化目标函数估计一个局部的坐标变换矩阵…

leetcode 力扣刷题 旋转矩阵(循环过程边界控制)

力扣刷题 旋转矩阵 二维矩阵按圈遍历&#xff08;顺时针 or 逆时针&#xff09;遍历59. 旋转矩阵Ⅱ54. 旋转矩阵剑指 Offer 29. 顺时针打印矩阵 二维矩阵按圈遍历&#xff08;顺时针 or 逆时针&#xff09;遍历 下面的题目的主要考察点都是&#xff0c;二维数组从左上角开始顺…

用Node.js吭哧吭哧撸一个运动主页

简单唠唠 某乎问题&#xff1a;人这一生&#xff0c;应该养成哪些好习惯&#xff1f; 问题链接&#xff1a;https://www.zhihu.com/question/460674063 如果我来回答肯定会有定期运动的字眼。 平日里也有煅练的习惯&#xff0c;时间久了后一直想把运动数据公开&#xff0c;…

Vue基本知识

一、vue入门 Vue为前端的框架&#xff0c;免除了原生js的DOM操作。简化书写。 基于MVVM的思想&#xff0c;实现数据的双向绑定&#xff0c;使编程的重点放在数据上。 1、引入vue.js文件 2、定义vue核心对象&#xff0c;定义数据模型 3、编写视图 //1、引入vue.js <scr…

【学习心得】安装cuda/cudann和pytorch

一、查看驱动信息 # 进入CMD输入命令 nvidia-smi 也可以右下角图标打开NVIDIA 设置进行查看 二、下载安装CUDA 1、下载 下载地址 https://developer.nvidia.com/ 2、安装 推荐自定义安装。建议只勾选Cuda&#xff0c;只安装这一个就好&#xff0c;以免报错安装失败。 3、验证…

05 - 研究 .git 目录

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. HEAD2. config3. refs4. objects 1. HEAD 2. config 3. refs 4. objects Git对象一共有三种&#xff1a;数据对象 blob、树对象 tree以及提交对象 commit&#xff0c;这些对象都被保…

小白到运维工程师自学之路 第七十四集 (kubernetes基于calico部署应用nginx)

一、详细介绍calico Calico 是一种基于 BGP 的、纯三层的、容器间互通的网络方案。与 OpenStack、Kubenetes、AWS、GCE 等云平台都能够良好的集成。在虚拟化平台中&#xff0c;如 OpenStack、Docker 等都需要实现 workloads 之间互连&#xff0c;但同时也需要对容器做隔离控制…

梅赛德斯-奔驰将成为首家集成ChatGPT的汽车制造商

ChatGPT的受欢迎程度毋庸置疑。OpenAI这个基于人工智能的工具&#xff0c;每天能够吸引无数用户使用&#xff0c;已成为当下很受欢迎的技术热点。因此&#xff0c;有许多公司都在想方设法利用ChatGPT来提高产品吸引力&#xff0c;卖点以及性能。在汽车领域&#xff0c;梅赛德斯…

抓包工具Fiddler下载与安装

一、Fiddler介绍 1.Fiddler简介 Fiddler 是一款免费、灵活、操作简单、功能强大的 HTTP 代理工具&#xff0c;是目前最常用的 HTTP 抓包工具之一。可以抓取所有的 HTTP/HTTPS 包、过滤会话、分析请求详细内容、伪造客户端请求、篡改服务器响应、重定向、网络限速、断点调试等…

GPT-4 如何为我编写测试

ChatGPT — 每个人都在谈论它,每个人都有自己的观点,玩起来很有趣,但我们不是在这里玩— 我想展示一些实际用途,可以帮助您节省时间并提高效率。 我在本文中使用GPT-4 动机 我们以前都见过这样的情况——代码覆盖率不断下降的项目——部署起来越来越可怕,而且像朝鲜一样…

POJ 2429 Miller-rabin素数判定 + pollard-rho质因子分解 + 埃氏筛法

题目不能说是很难&#xff0c;只是用到了许多数学上的知识&#xff08;费马小定理&#xff0c;miller-radin&#xff0c;pollard-rho&#xff09;&#xff0c;还有一些算法上的知识DFS&#xff0c;辗转相除。 我也很菜&#xff0c;一个周末的时间都用在这个题目上了&#xff0…

软考第二章 信息技术发展

本章内容&#xff1a;软件硬件、网络、存储、新技术。 文章目录 2.1 信息技术及其发展2.1.1 计算机硬件2.1.2 计算机网络2.1.3 存储和数据库2.1.4 信息安全 2.2 新一代信息技术2.2.1 物联网2.2.2 云计算2.2.3 大数据2.2.4 区块链2.2.5 人工智能虚拟现实 2.1 信息技术及其发展 …

EXCEL按列查找,最终返回该列所需查询序列所对应的值,VLOOKUP函数

EXCEL按列查找&#xff0c;最终返回该列所需查询序列所对应的值 示例&#xff1a;国标行业分类汉字&#xff0c;匹配id 使用VLOOKUP函数 第一参数&#xff1a;拿去查询的值。 第二参数&#xff1a;匹配的数据。 Ps&#xff1a;Sheet1!$C 21 : 21: 21:E 117 &#xff0c;需要…

通过版本号控制强制刷新浏览器或清空浏览器缓存

背景介绍 在我们做 web 项目时&#xff0c;经常会遇到一个问题就是&#xff0c;需要 通知业务人员&#xff08;系统用户&#xff09;刷新浏览器或者清空浏览器 cookie 缓存的情况。 而对于用户而言&#xff0c;很多人一方面不懂如何操作&#xff0c;另一方面由于执行力问题&am…