本帖最后由 ESCAS-team 于 2026-3-14 20:10 编辑
ESCAS介绍:https://www.matstr.com/forum.php ... ge=1&extra=#pid2609
为获得高质量的衍射数据,需对衍射数据进行统计学校正。现对ESCAS系统中衍射数据校正模块进行更新,增加的算法如下:
下面是对实现的 10 种离群值剔除方法 的简要说明(按代码中的顺序)。 1. Gaussian(高斯 /σ 法) - 思路:假设数据服从正态分布,用样本均值 μ 和标准差 σ,剔除满足 |x − μ| > k·σ 的点(代码里 k=2.5)。
- 特点:实现简单、直观;但 μ 和 σ 会被离群点拉偏,离群多时容易“误留”或“误删”。
2. MAD(中位数绝对偏差) - 思路:用中位数 med 代替均值,用 MAD = median(|x − med|) 代替标准差;剔除 |x − med| > k·1.4826·MAD 的点(1.4826 使在正态下 MAD 与 σ 相当)。
- 特点:对离群点不敏感,比 Gaussian 稳健。
3. IQR(四分位距) - 思路:不假设分布。用 Q1、Q3 和 IQR = Q3−Q1,剔除 x < Q1−1.5·IQR 或 x > Q3+1.5·IQR 的点(即箱线图规则)。
- 特点:完全基于分位数,非常稳健,不依赖均值/方差。
4. Percentile(百分位数) - 思路:按分位数截断:去掉低于 2.5% 分位、高于 97.5% 分位的点(比例可在代码中改)。
5. Iterative(迭代 σ 裁剪) - 思路:反复执行:用当前剩余数据算 μ 和 σ,剔除 |x−μ| > k·σ 的点,用剩余点再算 μ、σ,直到没有点被剔除或达到最大迭代次数。
- 特点:每轮用“干净”数据重算,比单次 Gaussian 更稳;天文/物理常用。
- 适用:近似正态、离群比例不高、希望自动多轮清洗时。
6. Grubbs(格拉布斯检验) - 思路:一次只考虑一个离群点。每次在剩余数据中找 G = max|x−μ|/σ,若 G 超过基于样本量 n 和显著性水平(如 0.05)的临界值,则剔除该点,再对剩余数据重复,直到 G 不超界。
- 特点:有统计检验依据,适合“少量离群”;每次只删一个,较保守。
- 适用:样本量不大、离群很少、且可接受“逐个检验”时。
7. Dixon(狄克逊Q 检验) - 思路:针对一个极值(最大或最小)。用 Q = (极值 − 相邻值) / 极差,与临界 Q 比较;若超界则剔除该极值,可重复对新的极值做检验。
- 适用:n 较小(如 3–30)、怀疑只有一端有一个离群点时。
8. Chauvenet(肖文尼准则) - 思路:在正态假设下,若某点的 P(|Z| > |z|) < 1/(2n)(即出现概率小于 1/(2n)),则剔除。根据 n 算出临界 z,剔除 |x−μ|/σ > z 的点,可迭代重算 μ、σ 再判。
- 适用:近似正态、希望用“概率过小”作为剔除标准时。
9. RANSAC(随机抽样一致) - 思路:多次随机取少量点(如 2 点)估计“中心”(如均值),用 k·MAD 做内点阈值,统计每个估计对应的内点个数;选内点最多的估计,其余为离群。
- 特点:对离群比例高时仍可用;结果依赖随机抽样,有随机性。
10. Isolation Forest(孤立森林) - 思路:建多棵随机划分的树:在随机选的分割点处把数据一分为二,直到点被“孤立”。离群点通常更快被孤立(路径短)。对每个点求平均路径长度,换算成异常分数,分数高于阈值则判为离群。
- 特点:不假设分布,可处理多峰、偏态;计算量相对大。
- 适用:分布复杂、或希望用“是否容易被孤立”来定义离群时。
对比小结 [td] | 方法 | 是否假设正态 | 稳健性 | 典型用途 | | Gaussian | 是 | 低 | 离群少、近似正态 | | MAD | 否(稳健估计) | 高 | 通用、要稳健 | | IQR | 否 | 高 | 分布未知、箱线图 | | Percentile | 否 | 高 | 按比例去两端 | | Iterative | 是(迭代) | 中高 | 自动多轮 σ 裁剪 | | Grubbs | 是 | 中 | 少量离群、逐点检验 | | Dixon | 是 | 中 | 小样本、单端极值 | | Chauvenet | 是 | 中 | 概率准则剔除 | | RANSAC | 否 | 高 | 离群多、投票式 | | Isolation | 否 | 高 | 复杂分布、路径长度 |
|