怎么用matlab剔除数据的异常值(3σ准则)
生活随笔
收集整理的這篇文章主要介紹了
怎么用matlab剔除数据的异常值(3σ准则)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考:https://blog.csdn.net/weixin_30633405/article/details/95177009
3σ準則又稱為拉依達準則,它是先假設一組檢測數據只含有隨機誤差,對其進行計算處理得到標準偏差,按一定概率確定一個區間,
認為凡超過這個區間的誤差,就不屬于隨機誤差而是粗大誤差,含有該誤差的數據應予以剔除。且3σ適用于有較多組數據的時候。
這種判別處理原理及方法僅局限于對正態或近似正態分布的樣本數據處理,它是以測量次數充分大為前提的,
當測量次數較少的情形用準則剔除粗大誤差是不夠可靠的。因此,在測量次數較少的情況下,最好不要選用準則,而用其他準則。
在正態分布中σ代表標準差,μ代表均值。x=μ即為圖像的對稱軸
3σ原則為
數值分布在(μ-σ,μ+σ)中的概率為0.6826
數值分布在(μ-2σ,μ+2σ)中的概率為0.9544
數值分布在(μ-3σ,μ+3σ)中的概率為0.9974
可以認為,Y 的取值幾乎全部集中在(μ-3σ,μ+3σ)區間內,超出這個范圍的可能性僅占不到0.3%.
?
我的數據是244*119,即有244組樣品,第一列是位置信息,隨后的各個列為變量信息,即每一列為一個變量,剔除每一列中的異常值。
下面的代碼實現的功能是找出剔除的異常值的位置信息,
for ii = 3:119P=data_jd(:,ii);ave = mean(P);%mean 求解平均值u = std(P);%求解標準差for i = 1:244if(abs(P(i)-ave)>3*u)P(i) = 0;P_ans = P(P==0);len=length(P_ans);if len == []continueelselocation=find(P==0)if len == 1loc(1,ii)=locationelsefor iii=1:lenloc(iii,ii)=location(iii)endendendelsecontinue;endendendans=loc(loc~=0); ans=unique(ans);#刪除重復的值%% 根據索引去除異常值 data_jd(ans,:)=[]?
?
總結
以上是生活随笔為你收集整理的怎么用matlab剔除数据的异常值(3σ准则)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人学习Robot Learning之
- 下一篇: 毕业设计 单片机音乐播放器设计 - 物联