【C++】中位数求解,中位数绝对偏差MAD的应用

这篇具有很好参考价值的文章主要介绍了【C++】中位数求解,中位数绝对偏差MAD的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C++】中位数求解,中位数绝对偏差MAD的应用,# C++,c++

标准正态分布是一种均值为0、标准差为1的特殊连续概率分布。它的概率密度函数是对称的钟形曲线。

中位数绝对偏差(Median Absolute Deviation,MAD)是一种用于衡量数据集的离散程度的统计量。它衡量了观测值相对于数据集的中位数的平均偏离程度。MAD 的计算过程首先找到数据集的中位数,然后计算每个观测值与中位数的绝对差,并求这些绝对差的中位数。

标准正态分布和 MAD 的关系约为 0.6745 是基于统计推断的结果。具体为沙呢:

  1. 对于标准正态分布,约68% 的数据落在均值加减一个标准差的范围内,常见的3sigma原则,约95% 的数据落在均值加减两个标准差的范围内,约99.7% 的数据落在均值加减三个标准差的范围内。这是根据正态分布的性质推导出来的。

  2. 中位数绝对偏差(MAD)的特性是,在标准正态分布中,数据集的中位数绝对偏差大约等于标准差乘以一个常数。这个常数约为0.6745。

对于标准正态分布的观测值,约50% 的数据落在中位数加减一个中位数绝对偏差的范围内。而对于标准正态分布,中位数绝对偏差的均值是标准差的某个倍数,经过计算得到约为0.6745。因此,我们可以使用这个常数来近似地将 MAD 转换为标准差的估计值。

需要注意的是,这个关系只在标准正态分布下成立。对于其他分布,该关系可能不准确。但在实际应用中,由于 MAD 具有鲁棒性(对异常值不敏感)和简单计算等优点,因此常常用作统计中的一种离散程度衡量指标。

float MADScaleEstimator::compute(std::vector<float>& errors) const
{
  CHECK(!errors.empty()) << "Error vector is empty.";
  auto it = errors.begin()+std::floor(errors.size()/2);
  std::nth_element(errors.begin(), it, errors.end()); // compute median
  return 1.48f * (*it); // 1.48f / 0.6745
}

这段代码是一个名为 MADScaleEstimator 的函数的实现,它计算给定浮点数向量 errors 的中位数绝对偏差(Median Absolute Deviation,MAD)的估计值。

具体功能如下:

  1. 首先,代码使用 CHECK(!errors.empty()) 来确保输入的错误向量 errors 不为空,如果为空,则抛出异常并输出错误信息 “Error vector is empty.”。

  2. 然后,代码通过使用标准库函数 std::nth_element 来找到 errors 向量的中位数。std::nth_element 函数在 errors.begin()errors.end() 之间找到第 (errors.size()/2) 个元素,并将其放置在 it 迭代器位置上,从而将 errors 向量分成两部分,左边小于中位数,右边大于等于中位数。

  3. 最后,代码返回 1.48f * (*it),这里使用了常量 1.48f 乘以中位数值 (*it) 来估计中位数绝对偏差(MAD)。这个系数(1.48)是一个经验值,用于将中位数绝对偏差转换成标准差估计的近似值。由于标准正态分布的标准差与 MAD 的关系约为 0.6745,因此 1.48f / 0.6745 用于进行该转换。

提供了一种通过计算浮点数向量的中位数和应用常量倍数来估计中位数绝对偏差的功能。文章来源地址https://www.toymoban.com/news/detail-624324.html

到了这里,关于【C++】中位数求解,中位数绝对偏差MAD的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++编程计算平均数、众数和中位数,可以快速解决计算问题

    说明 求N个整数的平均数,众数和中位数。 小知识: 众数 如有9个数:17 13 17 9 17 17 3 16 17 17出现的次数最多,即为这组数的众数。 此题保证众数是唯一的。 中位数 如有9个数:102 170 96 90 97 106 110 182 100 将这9个数按一定的顺序(从大到小或从小到大)排列后得到: 182 170 110

    2024年02月07日
    浏览(73)
  • 华为OD机试 - 查找众数及中位数(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如

    2024年04月08日
    浏览(57)
  • 【华为OD机考 统一考试机试C卷】 查找众数及中位数(C++ Java JavaScript Python)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月04日
    浏览(48)
  • 【每日一题】中位数

    一个长度为 L ( L ≥ 1 ) 的升序序列 S,处在第 [L / 2] 个位置的数称为 S 的中位数。 例如,若序列 S1 = (11, 13, 15, 17, 19),则 S1 的中位数是 15 。 两个序列的中位数 是含它们所有元素的升序序列的中位数。例如,若 S2 = (2, 4, 6, 8, 20),则 S1 和 S2 的中位数是 11 。 给出两个有序序列

    2024年02月04日
    浏览(44)
  • MATLAB知识点:median :计算中位数

    ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章 3.4.1节 中位数又称中值,我们将数据按从小到大的顺序排列,在排列后的数据中居于中间位置的

    2024年04月11日
    浏览(42)
  • 【LeetCode: 295. 数据流的中位数 + 堆】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月19日
    浏览(50)
  • 算法进阶——数据流中的中位数

    题目 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当

    2024年01月24日
    浏览(44)
  • 4---寻找两个正序数组的中位数

    给定两个大小分别为 m m m 和 n n n 的正序(从小到大)数组 n u m s 1 nums1 n u m s 1 和 n u m s 2 nums2 n u m s 2 。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O ( l o g ( m + n ) ) O(log (m+n)) O ( l o g ( m + n )) 。 示例 1: 输入 :nums1 = [1,3], nums2 = [2] 输出 :2.00000 解释

    2024年02月03日
    浏览(51)
  • 4. 寻找两个正序数组的中位数

    给定两个大小分别为  m  和  n  的正序(从小到大)数组  nums1  和  nums2 。请你找出并返回这两个正序数组的  中位数  。 算法的时间复杂度应该为  O(log (m+n))  。 示例 1: 示例 2: 提示: nums1.length == m nums2.length == n 0 = m = 1000 0 = n = 1000 1 = m + n = 2000 -106 = nums1[i], nums2[i]

    2024年01月18日
    浏览(34)
  • python计算平均数、中位数及标准差

    哈喽,大家好呀,下面是我整理的python计算平均数、中位数和标准差的方法,咱们一起学习,共同进步! 1.计算平均数 方法① lst=[1,2,3,4,5]                 #首先定义一个列表  avg= sum (lst)/ len (lst)     #使用sum( )函数和len( )函数计算平均值 print(\\\'平均值为:\\\',avg) 方法② impo

    2024年02月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包