異常值檢測:孤立森林模型(IsolationForest)總結

目錄

  • 一、前言
  • 二、孤立森林算法
    • 2.1 算法簡介
    • 2.2 基本原理
    • 2.3 算法步驟
    • 2.4 異常分數計算方式
    • 2.5 python調用方式
  • 三、python代碼示例
  • 四、小結
  • 五、參考學習


在這里插入圖片描述

一、前言

近期在研究構建壽命預測模型,相信很多數據人都懂建模的過程,其實有80%的時間都是在和數據處理打交道。

在數據處理過程中,一種常見的處理場景即異常值處理。日常常用的異常值處理,最常用的幾種方式: 西格瑪法則、四分位距、指定閾值 來識別檢測異常值,其它使用過的方法主要是基于距離或者密度的方法來識別,不過這類方法小數據量還行,大數據量就很很影響檢測效率。調研發現一種以前沒用過的一種方法:孤立森林算法(Isolation Forest),因此作一記錄學習。

二、孤立森林算法

2.1 算法簡介

孤立森林(Isolation Forest)是一種用于異常檢測的無監督學習算法,屬于ensemble的方法,由 Fei Tony Liu、Kai Ming Ting 和 Zhi-Hua Zhou 于 2008 年提出。它通過構建多棵孤立樹(Isolation Tree)來識別數據中的異常點,具有線性時間復雜度和高精準度,計算效率高、能夠處理高維數據等優點,廣泛應用于網絡安全、金融欺詐檢測、工業設備故障檢測等領域。

2.2 基本原理

孤立森林算法的核心思想基于這樣一個事實:異常點通常是數據集中少數且與其他數據點差異較大的點,因此它們更容易被孤立出來。該算法通過遞歸地隨機劃分數據空間,將異常點快速地隔離到樹的淺層節點,而正常點則需要更多的劃分才能被隔離,從而根據數據點在孤立樹中的路徑長度來判斷其是否為異常點。

2.3 算法步驟

  • 步驟一:構建孤立樹(iTree)
  • 從原始數據集中隨機選擇一部分樣本(通常為固定數量,記為 sample_size)作為當前樹的訓練樣本。
  • 隨機選擇一個特征和該特征上的一個分割值,將樣本集劃分為兩個子集。
  • 對每個子集重復上述步驟,直到滿足停止條件(例如,子集中只有一個樣本或達到最大樹深度)。
  • 步驟二:構建孤立森林

重復步驟一,構建多棵孤立樹(通常記為 n_estimators),這些樹構成了孤立森林。

  • 步驟三:計算路徑長度

對于每個數據點,將其輸入到孤立森林中的每棵樹中,記錄該數據點在每棵樹中從根節點到葉節點所經過的路徑長度。

  • 步驟四:計算異常分數

根據數據點在所有孤立樹中的平均路徑長度,計算其異常分數。異常分數的取值范圍在 0 到 1 之間,分數越接近 1 表示該數據點越可能是異常點,分數越接近 0 表示該數據點越可能是正常點。

2.4 異常分數計算方式

為了量化異常程度,孤立森林定義了異常分數 s(x,n)s(x,n)s(x,n),公式如下:
s(x,n)=2?E(h(x))c(n)s(x,n)=2^{-\frac{E(h(x))}{c(n)}}s(x,n)=2?c(n)E(h(x))?
其中:

  • h(x):樣本x在iTree上的路徑長度;
  • E(h(x)):樣本 x 在所有 iTree 中的平均路徑長度;
  • c(n):樣本量為 n 時的 “平均路徑長度期望”(作為歸一化因子,由理論推導得出,與 n 近似成對數關系);
  • n:構建 iTree 時的樣本子集大小。

分數解讀:

  • s≈1:樣本極可能是異常點(路徑長度遠短于平均);
  • s≈0:樣本極可能是正常點(路徑長度接近平均);
  • s≈0.5:樣本處于正常與異常的邊界(路徑長度接近隨機劃分的平均水平)。

2.5 python調用方式

python中有現在的算法庫,通過下述方式即可導入使用。

from sklearn.ensemble import IsolationForest

** 函數關鍵參數解析:**

  • n_estimators:iTree 的數量(默認 100)。樹越多,結果越穩定,但計算成本越高;
  • max_samples:每棵 iTree 處理的樣本量(默認 256)。過小可能導致異常點漏檢,過大則降低效率;
  • max_depth:iTree 的最大深度(默認隨樣本量動態調整)。限制深度可避免過擬合(尤其是樣本量小時)。

三、python代碼示例

# 導入必要的庫 
import pandas as pd  # 數據處理庫
import numpy as np  # 數值計算庫
import matplotlib.pyplot as plt  # 數據可視化庫
from sklearn.model_selection import train_test_split  # 數據集劃分工具
from sklearn.preprocessing import StandardScaler  # 數據標準化工具
from sklearn.ensemble import IsolationForest  # 異常檢測模型 
from sklearn.metrics import mean_squared_error, r2_score ,root_mean_squared_error # 模型評估指標
from itertools import groupby
from operator import itemgetter# 生成一些示例數據
np.random.seed(42)
X_inliers = 0.3 * np.random.randn(100, 2)
X_inliers = np.r_[X_inliers + 2, X_inliers - 2]
X_outliers = np.random.uniform(low=-4, high=4, size=(20, 2))
X = np.r_[X_inliers, X_outliers]# 創建并訓練孤立森林模型
clf = IsolationForest(n_estimators=100, contamination=0.1)
clf.fit(X)# 預測每個數據點的異常標簽
y_pred = clf.predict(X)# 可視化結果
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis')
plt.title('Isolation Forest Anomaly Detection')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

請添加圖片描述

四、小結

以前,有問題,找百度;現在有個更快捷的方式,有問題找chatgpt。不得不說,各類gpt工具,確實助力工作效率得到了很大的提升,相比百度搜索查找信息更加精準。最后,底層算法雖重要,但上層的思維邏輯更重要,作為數據分析師,千錘百煉自己思考問題、定義問題、解決問題的方式方法,思維邏輯尤其重要!

五、參考學習

  • 孤立森林異常值評分公式推導
  • 【異常檢測】孤立森林(Isolation Forest)算法簡介
  • 孤立森林(isolation):一個最頻繁使用的異常檢測算法

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

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

相關文章

Docker容器化部署實戰:Tomcat與Nginx服務配置指南

部署Tomcat搜索鏡像 使用以下命令搜索可用的Tomcat鏡像:docker search tomcat拉取鏡像 拉取官方Tomcat鏡像:docker pull tomcat創建專用目錄 為Tomcat配置和數據創建專用目錄:mkdir tomcat運行臨時容器并復制配置文件 啟動臨時容器以復制配置…

Go語言實戰案例-使用SQLite實現本地存儲

在開發工具類軟件、桌面應用或者移動端時,我們經常需要一個輕量級數據庫來做 本地存儲。相比 MySQL、Postgres 等服務型數據庫,SQLite 體積小、零配置、單文件存儲,非常適合這種場景。Go 語言通過 GORM SQLite 驅動 就能輕松實現。本文將帶你…

云計算學習100天-第23天

主機192.168.88.5 安裝nginx#安裝編譯工具,正則表達式依賴包,SSL加密依賴包 yum -y install gcc make pcre-devel openssl-devel tar -xf /root/lnmp_soft.tar.gz cd lnmp_soft/ tar -xf nginx-1.22.1.tar.gz cd nginx-1.22.1/ #指定安裝路徑&…

【生成樹+環】題解:P3907 環的異或_圖論_環_異或_搜索_算法競賽_C++

推銷洛谷博客:https://www.luogu.com.cn/article/znmr9iu9 Link:Luogu - P3907 這里默認題目中指的環都是“簡單環”(即沒有“環套環”的情況)。 眾所周知,樹是圖的一種特殊情況,且一定無環。如果我們想…

數據庫優化提速(二)排序優化之搜索大數據酒店,進銷存AI—仙盟創夢IDE

在 MySQL 數據庫管理中,排序操作對于數據的有效展示和分析至關重要。本文將以一個實際的 SQL 查詢為例,深入探討排序優化方案,并結合進銷存、酒店、知識庫等大數據場景,闡述這些優化策略的應用價值。原始SELECT 應用編號, 應用序列…

Linux之Ansible自動化運維(二)

一、ansible Playbook應用由于服務器數量很多,配置信息比較多,因此可以利用Ansible Playbook編寫任務自動化與流程化腳本Playbook 由一個或多個play組成的列表,play的主要功能Ansible中Task定義好的角色,指定劇本對應的服務器組二…

ArrayList線程不安全問題及解決方案詳解

問題背景在多線程編程中&#xff0c;我們經常會遇到集合類的線程安全問題。Java中的ArrayList是一個常用的集合類&#xff0c;但它不是線程安全的。當多個線程同時操作同一個ArrayList實例時&#xff0c;可能會出現各種不可預料的問題。問題演示List<String> list new A…

車輛方向數據集 - 物體檢測

關于數據集 包含超過50,000 張圖像中具有方向的車輛的 50,000 多萬個注釋。它通過同時提供車輛類別和方向來減少對方向進行分類的輔助神經網絡的需求。 預訓練權重 我們將繼續添加在車輛方向數據集和合成車輛方向數據集上訓練的各種對象檢測模型。如果您需要一些特定的預訓練權…

Nextcloud搭建教程:使用Docker在騰訊云服務器上自建私人云盤

更多云服務器知識&#xff0c;盡在hostol.com你那百兆光纖的寬帶。你是否也曾看著自己最珍貴的家庭照片、最私密的個人文檔&#xff0c;靜靜地躺在某個科技巨頭的服務器上&#xff0c;感到過一絲絲的不安&#xff1f;你的數據&#xff0c;到底被如何“閱讀”和“分析”&#xf…

【操作記錄】MNN Chat Android App 構建筆記(二)

&#x1f4d2; MNN Chat Android App 構建筆記 一、背景知識MNN 簡介 MNN 是阿里開源的輕量級深度學習框架&#xff0c;支持 Android / iOS / Linux / Windows。提供推理、LLM、Vision、Audio 等模塊。Android App 里用到的是 Java JNI 調用 MNN 庫。CMake NDK 的作用 CMake&…

如何在 Axios 中處理多個 baseURL 而不造成混亂

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

AP服務發現PRS_SOMEIPSD_00255 的解析

[PRS_SOMEIPSD_00255 ] 「SOME/IP-SD頭部的重啟標志&#xff0c;對于重啟后發出的所有報文&#xff0c;都應設置為 1&#xff0c;直至 SOME/IP頭部中的會話 ID (Session-ID) 回繞并因此再次從 1 開始。在此回繞之后&#xff0c;重啟標志應設置為 0。」(RS_SOMEIPSD_00006)核心含…

純手擼一個RAG

純手擼一個RAGRAG基本流程第一階段&#xff1a;數據預處理&#xff08;索引&#xff09; - 構建知識庫第二階段&#xff1a;查詢與生成&#xff08;推理&#xff09; - 回答問題總結Chunk介紹Chunk框架的介紹Chunk核心概念選擇分塊策略和框架如何選擇分塊框架Python代碼實現第一…

視覺語言對比學習的發展史:從CLIP、BLIP、BLIP2、InstructBLIP(含MiniGPT4的詳解)

前言 本文一開始是屬于此文《圖像生成(AI繪畫)的發展史&#xff1a;從CLIP、BLIP、InstructBLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion(含ControlNet詳解)》的&#xff0c;后獨立成本文 第一部分 從CLIP、BLIP1、BLIP2到InstructBLIP 1.1 CLIP&#xff1a;基于對比文本…

HTTP代理與SOCKS代理的區別、應用場景與選擇指南

在互聯網日常使用與跨境業務中&#xff0c;HTTP代理 和 SOCKS代理 是兩種常見的網絡代理方式。無論是跨境電商、社交媒體賬號運營、數據采集&#xff0c;還是科學訪問海外資源&#xff0c;都需要選擇合適的代理協議。什么是HTTP代理&#xff1f;定義HTTP代理 是基于 HTTP協議 的…

AI重塑職業教育:個性化學習計劃提效率、VR實操模擬強技能,對接就業新路徑

職業教育長期面臨著一系列問題&#xff0c;包括“統一課程難以適配不同基礎學員”、“實操反饋滯后”和“就業技能與企業需求脫節”等。隨著人工智能技術的應用&#xff0c;這些傳統教學模式正在發生變化。個性化技能培養得以實現&#xff0c;甚至可以提前識別學員的就業短板。…

主題配色下的背景透明度

用 CSS color-mix() 解決背景透明度的痛點 在設計卡片組件時&#xff0c;經常遇到這樣的需求&#xff1a;卡片背景需要80%透明度&#xff0c;鼠標懸浮在內部某項時&#xff0c;修改背景色但保持同樣的透明度。 問題場景 .card {background: rgba(59, 130, 246, 0.8); /* 藍色80…

【Python代碼】谷歌專利CSV處理函數

以下是一個重構后的高可用、可配置、低耦合的專利CSV處理函數&#xff0c;包含清晰的注釋和結構&#xff1a; import csv import pandas as pd from datetime import datetime import os from typing import List, Dict, Any, Optional, Tuple import logging# 配置日志 loggin…

3-2〔OSCP ? 研記〕? WEB應用攻擊?WEB安全防護體系

鄭重聲明&#xff1a; 本文所有安全知識與技術&#xff0c;僅用于探討、研究及學習&#xff0c;嚴禁用于違反國家法律法規的非法活動。對于因不當使用相關內容造成的任何損失或法律責任&#xff0c;本人不承擔任何責任。 如需轉載&#xff0c;請注明出處且不得用于商業盈利。 …

PCIe 5.0相比頂級PCIe 4.0有何提升?

還在為PCIe 4.0固態硬盤那7000MB/s的速度沾沾自喜&#xff1f;醒醒&#xff0c;朋友。當很多人還在討論PCIe 4.0是否“性能過剩”時&#xff0c;真正面向未來的PCIe 5.0已經帶著碾壓級的實力&#xff0c;來到了我們面前。這不是一次常規的“升級”&#xff0c;更不是英特爾式的…