最小协方差行列式(Minimum Covariance Determinant)的原理及代码


本文是引用《多元数据离群点探测的倾斜重加权方法》 ,作者为张若璇和田茂再。

前言

多元数据集存在偏离正常范围的“离群点”。一般在预处理数据环节,需检测出离群点,再进行处理。
离群点产生的原因可能是由数据中存在某些点来自于与总体分布不同的其它分布。具体而言,假设多元数据集大多数样本服从分布F,少量样本服从分布G;则将少量样本定义为离群点。
一般采用马氏距离来检验某个样本是否为离群点。在计算距离过程中需要提供均值估计量和协方差估计量,这两个参数容易被离群值影响而发生偏离,导致马氏距离计算不准确,最终影响离散点的判断。


一、利用马氏距离探测离群点的原理

多元数据集为n行p列x = (x1, x2, … , xn), 均值为μ,协方差矩阵为Σ。
在实际情况下,一组样本其均值和协方差矩阵的真实值未知。因此,均值估计量的公式为:
在这里插入图片描述
协方差估计量的公式为:
在这里插入图片描述
附上协方差的意义和计算公式,见链接:https://www.cnblogs.com/ywl925/p/3210822.html
每个样本与中心之间的马氏距离公式为:
在这里插入图片描述
一般地,如果马氏距离大于某个临界值,则该点视为离群点。

二、最小协方差行列式的由来

由于直接计算均值和协方差两个估计量易受离群值影响而发生偏移,马氏距离计算不准确,进而对离群值的判断出现失误。为了获取更加稳健的估计量,最小协方差行列式(Mininum Covariance Determinant,简称为MCD)被提出,提高了离群点探测的准确度。

三、最小协方差行列式探测离群点的原理

利用最小协方差行列式计算可以获取更稳健的均值和协方差估计量,再根据马氏距离计算,可以更精准地探测离群点。
MCD方法的思想:
找到一个样本量为h的子集:在这里插入图片描述
使得在所有大小为h的子集中,该子集的协方差矩阵的行列式是最小的。
根据MCD计算均值估计量的公式:
在这里插入图片描述
根据MCD计算协方差估计量的公式:
在这里插入图片描述
其中,在这里插入图片描述
是一个比例常数,保证了协方差估计量的一致性和无偏性。在有限样本情况下,一般计算如下:
在这里插入图片描述
另外,在这里插入图片描述
是小样本情形下的纠偏系数;在离群点的探测中,为了得到尽可能高的崩溃点,常取
在这里插入图片描述
获取均值和协方差估计量后,每个样本与中心之间的马氏距离公式为:
在这里插入图片描述
使用MCD,我们一般使用Rowsseeuw和Van Driessen的FAST-MCD算法。

这里是引用《A Fast Algorithm for the Minimum Covariance Determinant Estimator》,作者为Rowsseeuw和Van Driessen

四、最小协方差行列式探测离群点的代码

代码见链接:
https://pyod.readthedocs.io/en/latest/_modules/pyod/models/mcd.html

总结

由于直接计算多元数据集的均值估计量和协方差估计量容易被离群值影响而发生偏离,导致马氏距离计算不准确,进而影响离群值的判断;因此利用最小协方差行列式获取更为稳健的估计量,计算马氏距离更准确,进而达到更有效地探测离群点的目的。

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自适应协方差矩阵的瞬时极化分析是一种信号处理方法,可用于提取地震信号中的瞬时极化信息。以下是该方法的matlab代码实现。 1. 初始化参数 clear;clc; load('data.mat'); %载入地震数据 N = length(data); %数据点数 fs = 200; %采样率 t = (0:N-1)/fs; %时间序列 winlen = 0.5; %窗口长度 winstep = 0.2; %窗口步长 winn = fix((N-winlen*fs)/(winstep*fs))+1; %窗口数 window = hamming(winlen*fs); %汉明窗 2. 计算自适应协方差矩阵 AdCovMatrix = zeros(3,3,winn); %初始化自适应协方差矩阵 for i = 1:winn idx = (i-1)*winstep*fs+1:(i-1)*winstep*fs+winlen*fs; datawin = data(idx).*window; Nwin = length(datawin); AdCovMatrix(:,:,i) = cov(datawin'); %计算自适应协方差矩阵 end 3. 计算特征向量和特征值 eigVector = zeros(3,3,winn); %初始化特征向量 eigValue = zeros(3,winn); %初始化特征值 for i = 1:winn [eigVector(:,:,i), eigValue(:,i)] = eig(AdCovMatrix(:,:,i)); end 4. 计算瞬时极化 ip = zeros(1,winn); %初始化瞬时极化 for i = 1:winn ip(i) = eigValue(3,i)/sum(eigValue(:,i)); %计算瞬时极化 end 5. 绘制瞬时极化曲线 figure; plot(t(1:winn),ip,'r'); xlabel('Time (s)'); ylabel('Instantaneous polarization'); title('Adaptive covariance matrix instantaneous polarization analysis'); 以上是自适应协方差矩阵的瞬时极化分析的matlab代码实现。其中,data.mat为地震数据,winlen和winstep分别表示窗口长度和步长,AdCovMatrix为自适应协方差矩阵,eigVector和eigValue为特征向量和特征值,ip为瞬时极化。最后,绘制出了瞬时极化曲线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值