【算法】基于中位數和MAD魯棒平均值計算算法

問題

在項目中,需要對異常值進行剔除,需要一種魯棒性比較好的方法,總結了一個實踐方法。

方法

基于中位數和MAD(中位數絕對偏差)的魯棒平均值計算算法的詳細過程,按照您要求的步驟分解:


算法過程

過程:
    1. 先使用中位數作為初始估計
    1. 計算MAD作為離散度度量
    1. 排除偏離中位數超過3倍MAD的數據點
    1. 對剩余數據計算平均值
輸入
  • 數據集 data = [x?, x?, ..., x?](可能包含異常值)
  • 異常值閾值 k(默認 k=3
輸出
  • 魯棒平均值 robust_mean
  • 被排除的異常值索引列表 outliers

步驟 1:計算中位數(初始估計)

中位數對異常值不敏感,是數據中心的魯棒估計。

median = np.median(data)  # 中位數

例子
data = [10, 12, 11, 15, 10, 9, 11, 10, 100, 8, 9, 10, 12, -50]
排序后:[-50, 8, 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 15, 100]
中位數 median = 10(第7和第8個值的平均)


步驟 2:計算MAD(離散度度量)

MAD(Median Absolute Deviation)是數據與中位數絕對偏差的中位數,對異常值魯棒。

deviations = np.abs(data - median)  # 各點與中位數的絕對偏差
mad = np.median(deviations)         # MAD
mad = mad * 1.4826                  # 調整因子(使MAD≈標準差)

調整因子解釋

  • 對于正態分布,標準差 σ ≈ 1.4826 × MAD
  • 調整后,k=3 對應正態分布的3σ準則(覆蓋99.7%數據)。

例子
絕對偏差 deviations = [60, 2, 1, 5, 0, 1, 1, 0, 90, 2, 1, 0, 2, 40]
排序后:[0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 5, 40, 60, 90]
MAD = 1(中位數)
調整后 mad = 1.4826


步驟 3:排除異常值(3×MAD準則)

標記所有滿足 |x? - median| > k × mad 的點為異常值。

outlier_mask = deviations > (k * mad)  # 異常值掩碼
clean_data = data[~outlier_mask]       # 清洗后的數據

例子k=3):
閾值 3 × 1.4826 ≈ 4.45
異常值條件:|x? - 10| > 4.45

  • 100|100 - 10| = 90 > 4.45 → 異常
  • -50|-50 - 10| = 60 > 4.45 → 異常
    其他點均保留。

步驟 4:計算剩余數據的平均值

對清洗后的數據求算術平均。

robust_mean = np.mean(clean_data)

例子
清洗后數據:[10, 12, 11, 15, 10, 9, 11, 10, 8, 9, 10, 12]
魯棒平均值 robust_mean = 10.5


完整代碼實現

import numpy as npdef robust_mean(data, k=3):data = np.asarray(data)median = np.median(data)# 計算MAD并調整deviations = np.abs(data - median)mad = np.median(deviations) * 1.4826# 處理MAD為0的情況(所有數據相同)if mad == 0:return median, np.array([])# 標記并排除異常值outlier_mask = deviations > (k * mad)clean_data = data[~outlier_mask]return np.mean(clean_data), np.where(outlier_mask)[0]# 示例
data = [10, 12, 11, 15, 10, 9, 11, 10, 100, 8, 9, 10, 12, -50]
mean, outliers = robust_mean(data)
print(f"魯棒平均值: {mean}, 異常值索引: {outliers}")

算法優點

  1. 魯棒性:中位數和MAD均不受極端值影響。
  2. 自動閾值k=3 對應正態分布的3σ準則,可調整(如嚴格檢測用 k=2.5)。
  3. 適用性:適合傳感器數據(如雞秤)、金融數據等含離群點的場景。

可視化

數據分布: [-50, 8, 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 15, 100]↑______中位數=10______↑           ↑異常值(-50)                    異常值(100)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84853.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

插入點(position) 和對齊點(AlignmentPoint)詳解——CAD c#二次開發

在 AutoCAD 中,文本對象的位置由插入點(position) 和對齊點(Alignment Point) 共同控制,兩者的關系取決于文本的對齊方式。以下是詳細說明: 一、插入點與對齊點的定義 1. 插入點(p…

QT打包應用

本次工程使用qt mingGw 64-bit 下面詳細介紹下windows平臺qt應用程序打包流程 1、先編譯項目的release版本生成exe文件 2、創建腳本運行windeployqt.exe完成打包 rundeploy.bat腳本 set PATHE:\Tools\qt\Qt5\5.14.2\mingw73_64\bin;%PATH% windeployqt.exe MyDesignWidget.ex…

[軟件測試]:什么是自動化測試?selenium+webdriver-manager的安裝,實現你的第一個腳本

目錄 1. 什么是自動化測試? 回歸測試 自動化分類 2. web自動化測試 3. selenium 1. 什么是自動化測試? 通過自動化測試工具,編寫腳本,自動執行測試用例,主要用于回歸測試,性能測試等重復測試任務 常…

使用OpenCV和Python進行圖像掩膜與直方圖分析

文章目錄 引言1. 準備工作2. 加載并顯示原始圖像3. 創建掩膜3. 應用掩膜5. 計算并顯示直方圖6. 結果分析7. 總結 引言 在圖像處理中,掩膜(Mask)是一個非常重要的概念,它允許我們選擇性地處理圖像的特定區域。今天,我將通過一個實際的例子來展…

Genio 1200 Evaluation MT8395平臺安裝ubuntu

官網教程: Getting Started with Genio 1200 Evaluation Kit — Ubuntu on Genio documentation Windows PC工具: Setup Tool Environment (Windows) — IoT Yocto documentation 鏡像下載地址: Install Ubuntu on MediaTek Genio | Ubu…

如何畫好架構圖:架構思維的三大底層邏輯

👉目錄 0 前言 1 宏觀 2 中觀 3 微觀 4 補充 俗話說,一圖勝千言。日常工作中,當我們要表達自己的設計思路的時候,會畫各式各樣的圖。但因為各自知識儲備的差異,思維的差異,不同類型的系統側重的架構設計點也…

Spring MVC擴展消息轉換器-->格式化時間信息

Spring MVC 的消息轉換器的作用:在 HTTP 請求/響應與 Java 對象之間進行轉換 可以自行擴展消息轉換器 一、創建對象映射規則 package com.sky.json;import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.Objec…

Elasticsearch 的自動補全以及RestAPI的使用

Elasticsearch 提供了強大的自動補全 (Autocomplete) 功能,以下為一個基礎的自動補全DSL語句 {"suggest": {"my_suggestion": { // 自定義建議器名稱,可按需修改"text": "ap", // 用戶輸入的前綴(如搜索框…

1.4、SDH網狀拓撲

鏈形網星形網樹形網環形網網孔形網 1.鏈形拓撲 結構: 節點像鏈條一樣首尾依次串聯連接。信號從一個節點傳到下一個節點,直至終點。 特點: 簡單經濟: 結構最簡單,成本最低,適用于沿線覆蓋(如鐵…

如何在 ArcGIS 中使用 Microsoft Excel 文件_20250614

如何在 ArcGIS 中使用 Microsoft Excel 文件 軟件版本:win11; ArcGIS10.8; Office2024 1. 確認 ArcGIS 10.8 對 .xlsx 文件的支持 ArcGIS 10.8 支持 .xlsx 文件(Excel 2007 及以上格式),但需要安裝 Microsoft Access Database …

Python----OpenCV(圖像處理——圖像的多種屬性、RGB與BGR色彩空間、HSB、HSV與HSL、ROI區域)

Python----計算機視覺處理(opencv:像素,RGB顏色,圖像的存儲,opencv安裝,代碼展示) Python----計算機視覺處理(Opencv:圖片顏色識別:RGB顏色空間,…

java設計模式[1]之設計模式概覽

文章目錄 設計模式什么是設計模式為什么要學習設計模式設計模式的設計原則設計模式的分類 設計模式 什么是設計模式 設計模式是前人根據經驗的總結,是軟件開發中的最佳實踐,幫助開發者在面對復雜設計問題時提供有效的解決方案。設計模式不僅僅只是一種…

aflplusplus:開源的模糊測試工具!全參數詳細教程!Kali Linux教程!(四)

使用 afl-lto clang LLVM 編譯器 1. -help 顯示可用選項 afl-lto --help 其他選項同上,這里不再展開敘述。 afl-lto 1. -help 顯示可用選項 afl-lto --help 其他選項同上,這里不再展開敘述。 afl-network-client 1. 幫助文檔 afl-network-cl…

區間合并:牛奶

區間合并:牛奶 牛奶 www.acwing.com/problem/content/description/1345/ 本質就是區間合并問題從第一次擠奶才開始計算兩個最長時間 import java.util.*;public class Main {static final int N 5010;static Pair[] pairs new Pair[N];static class Pair imple…

Hive實現值列表橫向展示(非列轉行)

一、場景說明: 當前有各個流程的節點名稱和節點時間。數倉中的表存在的格式為縱向存儲,分別為節點名稱、接收時間 現數據分析過程中需要將每個流程的節點時間橫向展示,如果沒有該節點則置空 這種區別于行轉列和列轉行的操作。(具體可參考博主**

藍橋杯20151 跳石頭

問題描述 小明正在和朋友們玩跳石頭的小游戲,一共有 n 塊石頭按 1 到 n 順序排成一排,第 i 塊石頭上寫有正整數權值 ci? 。 如果某一時刻小明在第 j 塊石頭,那么他可以選擇跳向第 jcj? 塊石頭 (前提 jcj≤n )或者跳…

深度學習——基于卷積神經網絡的MNIST手寫數字識別詳解

文章目錄 引言1. 環境準備和數據加載1.1 下載MNIST數據集1.2 數據可視化 2. 數據預處理3. 設備配置4. 構建卷積神經網絡模型5. 訓練和測試函數5.1 訓練函數5.2 測試函數 6. 模型訓練和評估6.1 初始化損失函數和優化器6.2 訓練過程 7. 關鍵點解析8. 完整代碼9. 總結 引言 手寫數…

Activiti初識

文章目錄 1 工作流介紹1_工作流概念介紹2 工作流系統3 適用行業4 具體應用5 實現方式 2 Activiti介紹1_BPM2 BPM 軟件3 BPMN 3 使用步驟1_部署 activiti2 流程定義3 流程定義部署4 啟動一個流程實例5 用戶查詢待辦任務(Task)6 用戶辦理任務7 流程結束 4 Activiti應用1_Activiti…

CyclicBarrier入門代碼解析

文章目錄 核心思想:組隊出游,人到齊了才出發 🚌最簡單易懂的代碼示例代碼解析運行效果分析CyclicBarrier vs CountDownLatch 的關鍵區別CyclicBarrier在業務系統里面通常有什么常用的應用場景核心應用模式1. 數據并行處理與ETL(最…

Maven 配置中繞過 HTTP 阻斷機制的完整解決方案

Maven 配置中繞過 HTTP 阻斷機制的完整解決方案 一、背景與問題分析 自 Maven 3.8.1 版本起&#xff0c;出于安全考慮&#xff0c;默認禁止了對 HTTP 倉庫的訪問。這一機制通過 <mirror> 配置中的 maven-default-http-blocker 實現&#xff0c;其作用是攔截所有使用 HT…