1. 程式人生 > 實用技巧 >ml-9-1-異常檢測(Anomaly Detection)

ml-9-1-異常檢測(Anomaly Detection)

異常檢測(Anomaly Detection)

Problem Motivation

這是機器學習演算法的一個常見應用。這種演算法的一個有趣之處在於:它雖然主要用於非監督學習問
題,但從某些角度看,它又類似於一些監督學習問題。

什麼是異常檢測呢?為了解釋這個概念,讓我舉一個例子吧:

假想你是一個飛機引擎製造商,當你生產的飛機引擎從生產線上流出時,你需要進行 QA(質量控制測試),而作為這個測試的一部分,你測量了飛機引擎的一些特徵變數,比如引擎運轉時產生的熱量,或者引擎的振動等等。

img

這樣一來,你就有了一個數據集,從 x (1) 到 x (m) ,如果你生產了 m 個引擎的話,你將這些資料繪製成圖表,看起來就是這個樣子:

img

這裡的每個點、每個叉,都是你的無標籤資料。這樣,異常檢測問題可以定義如下:我們假設後來有一天,你有一個新的飛機引擎從生產線上流出,而你的新飛機引擎有特徵變數x test 。所謂的異常檢測問題就是:我們希望知道這個新的飛機引擎是否有某種異常,或者說,我們希望判斷這個引擎是否需要進一步測試。因為,如果它看起來像一個正常的引擎,那麼我們可以直接將它運送到客戶那裡,而不需要進一步的測試。

給定資料集 x (1) ,x (2) ,…,x (m) ,我們假使資料集是正常的,我們希望知道新的資料 x test 是不
是異常的,即這個測試資料不屬於該組資料的機率如何。我們所構建的模型應該能根據該測
試資料的位置告訴我們其屬於一組資料的可能性 p(x)。

img

上圖中,在藍色圈內的資料屬於該組資料的可能性較高,而越是偏遠的資料,其屬於該
組資料的可能性就越低。

這種方法稱為密度估計,表達如下:

img

欺詐檢測:

X (i) = 使用者的第 i 個活動特徵

模型 p(x) =我們其屬於一組資料的可能性

通過 p(x)<ε 檢測非正常使用者。

異常檢測主要用來識別欺騙。例如線上採集而來的有關使用者的資料,一個特徵向量中可能會包含如:使用者多久登入一次,訪問過的頁面,在論壇釋出的帖子數量,甚至是打字速度等。嘗試根據這些特徵構建一個模型,可以用這個模型來識別那些不符合該模式的使用者。

再一個例子是檢測一個數據中心,特徵可能包含:記憶體使用情況,被訪問的磁碟數量,CPU 的負載,網路的通訊量等。根據這些特徵可以構建一個模型,用來判斷某些計算機是不是有可能出錯了。

Gaussian Distribution高斯分佈

高斯分佈,也稱為正態分佈。回顧高斯分佈的基本知識。
通常如果我們認為變數 x 符合高斯分佈 x~N(μ,σ 2 )則其概率密度函式為:

img

我們可以利用已有的資料來預測總體中的 μ 和 σ 2 的計算方法如下:

img

高斯分佈樣例:

img

注:機器學習中對於方差我們通常只除以 m 而非統計學中的(m-1)。這裡順便提一下,在實際使用中,到底是選擇使用 1/m 還是 1/(m-1)其實區別很小,只要你有一個還算大的訓練集,在機器學習領域大部分人更習慣使用 1/m 這個版本的公式。這兩個版本的公式在理論特性和數學特性上稍有不同,但是在實際使用中,他們的區別甚小,幾乎可以忽略不計。

Algorithm演算法

應用高斯分佈開發異常檢測演算法。
異常檢測演算法:

對於給定的資料集 x (1) ,x (2) ,…,x (m) ,我們要針對每一個特徵計算 μ 和 σ 2 的估計值。

img

一旦我們獲得了平均值和方差的估計值,給定新的一個訓練例項,根據模型計算 p(x):

img

當 p(x)<ε 時,為異常。
下圖是一個由兩個特徵的訓練集,以及特徵的分佈情況:

img

下面的三維圖表表示的是密度估計函式,z 軸為根據兩個特徵的值所估計 p(x)值:

img

選擇一個 ε,將 p(x)=ε 作為我們的判定邊界,當 p(x)>ε 時預測資料為正常資料,否則則為異常.

Developing and Evaluating an Anomaly Detection System開發和評價一個異常檢測系統

異常檢測演算法是一個非監督學習演算法,意味著我們無法根據結果變數 y 的值來告訴我們資料是否真的是異常的。我們需要另一種方法來幫助檢驗演算法是否有效。當我們開發一個異常檢測系統時,我們從帶標記(異常或正常)的資料著手,我們從其中選擇一部分正常資料用於構建訓練集,然後用剩下的正常資料和異常資料混合的資料構成交叉檢驗集和測試集。

例如:我們有 10000 臺正常引擎的資料,有 20 臺異常引擎的資料。 我們這樣分配數
據:

  • 6000 臺正常引擎的資料作為訓練集

  • 2000 臺正常引擎和 10 臺異常引擎的資料作為交叉檢驗集

  • 2000 臺正常引擎和 10 臺異常引擎的資料作為測試集

具體的評價方法如下:

  1. 根據測試集資料,我們估計特徵的平均值和方差並構建 p(x)函式
  2. 對交叉檢驗集,我們嘗試使用不同的 ε 值作為閥值,並預測資料是否異常,根據 F 1
    值或者查準率與查全率的比例來選擇 ε
  3. 選出 ε 後,針對測試集進行預測,計算異常檢驗系統的 F 1 值,或者查準率與查全
    率之比
    選擇一個 ε,將 p(x)=ε 作為我們的判定邊界,當 p(x)>ε 時預測資料為正常資料,

之前我們構建的異常檢測系統也使用了帶標記的資料,與監督學習有些相似,下面的對
比有助於選擇採用監督學習還是異常檢測:

兩者比較:

img

Choosing What Features to Use選擇特徵

對於異常檢測演算法,我們使用的特徵是至關重要的,下面談談如何選擇特徵:異常檢測假設特徵符合高斯分佈,如果資料的分佈不是高斯分佈,異常檢測演算法也能夠工作,但是最好還是將資料轉換成高斯分佈,例如使用對數函式:x = log(x+c),其中 c 為非負常數; 或者 x=x c ,c 為 0-1 之間的一個分數,等方法。

img

誤差分析:

一個常見的問題是一些異常的資料可能也會有較高的 p(x)值,因而被演算法認為是正常的。這種情況下誤差分析能夠幫助我們,我們可以分析那些被演算法錯誤預測為正常的資料,觀察能否找出一些問題。我們可能能從問題中發現我們需要增加一些新的特徵,增加這些新特徵後獲得的新演算法能夠幫助我們更好地進行異常檢測。

異常檢測誤差分析:

img

我們通常可以通過將一些相關的特徵進行組合,來獲得一些新的更好的特徵(異常資料的該特徵值異常地大或小),例如,在檢測資料中心的計算機狀況的例子中,我們可以用 CPU負載與網路通訊量的比例作為一個新的特徵,如果該值異常地大,便有可能意味著該伺服器是陷入了一些問題中。

Multivariate Gaussian Distribution多元高斯分佈

假使我們有兩個相關的特徵,而且這兩個特徵的值域範圍比較寬,這種情況下,一般的高斯分佈模型可能不能很好地識別異常資料。其原因在於,一般的高斯分佈模型嘗試的是去同時抓住兩個特徵的偏差,因此創造出一個比較大的判定邊界。

下圖中是兩個相關特徵,洋紅色的線(根據 ε 的不同其範圍可大可小)是一般的高斯分佈模型獲得的判定邊界,明顯綠色的 X 所代表的資料點很可能是異常值,但是其 p(x)值卻仍然在正常範圍內。多元高斯分佈將建立像圖中藍色曲線所示的判定邊界。

img

在一般的高斯分佈模型中,我們計算 p(x)的方法是: 通過分別計算每個特徵對應的機率然後將其累乘起來,在多元高斯分佈模型中,我們將構建特徵的協方差矩陣,用所有的特
徵一起來計算 p(x)。

我們首先計算所有特徵的平均值,然後再計算協方差矩陣:

img

注:其中 μ 是一個向量,其每一個單元都是原特徵矩陣中一行資料的均值。最後我們計
算多元高斯分佈的 p(x):

img

|Σ|是定矩陣,在 Octave 中用 det(sigma)計算
Σ1 是逆矩陣,下面我們來看看協方差矩陣是如何影響模型的:

img

上圖是 5 個不同的模型,從左往右依次分析:

  1. 是一個一般的高斯分佈模型
  2. 通過協方差矩陣,令特徵 1 擁有較小的偏差,同時保持特徵 2 的偏差
  3. 通過協方差矩陣,令特徵 2 擁有較大的偏差,同時保持特徵 1 的偏差
  4. 通過協方差矩陣,在不改變兩個特徵的原有偏差的基礎上,增加兩者之間的正相關
  5. 通過協方差矩陣,在不改變兩個特徵的原有偏差的基礎上,增加兩者之間的負相關

多元高斯分佈模型與原高斯分佈模型的關係:

可以證明的是,原本的高斯分佈模型是多元高斯分佈模型的一個子集,即像上圖中的第
1、2、3,3 個例子所示,如果協方差矩陣只在對角線的單位上有非零的值時,即為原本的
高斯分佈模型了。

原高斯分佈模型和多元高斯分佈模型的比較:

img

原高斯分佈模型被廣泛使用著,如果特徵之間在某種程度上存在相互關聯的情況,我們
可以通過構造新新特徵的方法來捕捉這些相關性。

如果訓練集不是太大,並且沒有太多的特徵,我們可以使用多元高斯分佈模型。

Anomaly Detection using the Multivariate Gaussian Distribution使用多元高斯分佈進行異常檢測

關於多元高斯分佈,看到的一些建立的各種分佈模型,當
你改變引數,μ和Σ。在這段視訊中,讓我們用這些想法,並應用它們制定一個不同的異常
檢測演算法。

要回顧一下多元高斯分佈和多元正態分佈:

img

分佈有兩個引數,μ和Σ。其中μ這一個 n 維向量和Σ的協方差矩陣,是一種 n 乘 n 的
矩陣。而這裡的公式 X 的概率,如按μ和引數化Σ,和你的變數μ和Σ,你可以得到一個範
圍的不同分佈一樣,你知道的,這些都是三個樣本,那些我們在以前的視訊看過了。

因此,讓我們談談引數擬合或引數估計問題:

這其實只是當我們使用 PCA 演算法時候,有Σ時寫出來。所以你只需插入上述兩個公式,
這會給你你估計的引數μ和你估計的引數Σ。所以,這裡給出的資料集是你如何估計μ和Σ。
讓我們以這種方法而只需將其插入到異常檢測演算法。那麼,我們如何把所有這一切共同開發一個異常檢測演算法?

img

首先,我們把我們的訓練集,和我們的擬合模型,我們計算 P(x),要知道,設定μ和描述的
一樣Σ。

img

如圖,該分佈在中央最多,越到外面的圈的範圍越小。
並在該點是出路這裡的概率非常低。
原始模型與多元高斯模型的關係如圖:
其中:協方差矩陣Σ為:

img

不洗澡的鯨魚   
 
 </div> 

             
          <div class=


相關推薦

ml-9-1-異常檢測(Anomaly Detection)

異常檢測(Anomaly Detection) Problem Motivation 這是機器學習演算法的一個常見應用。這種演算法的一個有趣之處在於:它雖然主要用於非監督學習問 題,但從某些角度看,它又類似於一些監督學習問題。

Step by step install and run Hadoop 2.9.1 on Windows 10 64 bit (最全步驟整理)

1. Java Download the Java 1.8 64 bit version fromhttps://java.com/en/download/ --------- If not 64 bit java there will be error when start resource node manager

9.1 多對一需求程式碼編寫

9.1 多對一需求程式碼編寫 需求:查詢所有學生資訊,以及對應的老師資訊 方法一:按照查詢巢狀處理(子查詢)

寶塔面板6.X在Docker中安裝寶塔面板5.9.1 – 我是不是太閒了?

我是不是太閒了,問你們三遍,場景是這樣的,我在一臺VPS裡面安裝寶塔面板6.X,寶塔面板的軟體商店有Docker管理器2.0這一個免費好用的小玩意。大鳥安裝好Docker管理器2.0,然後在Docker中安裝寶塔面板5.9.1。真是太

9.1 代理的設定

9.1 代理的設定 在前面我們介紹了多種請求庫,如 Requests、Urllib、Selenium 等。我們接下來首先貼近實戰,瞭解一下代理怎麼使用,為後面瞭解代理池、ADSL 撥號代理的使用打下基礎。

LOF異常檢測演算法實現

#LOF異常檢測演算法主要用異常點的檢測輸出from scipy.spatial.distance import cdistimport numpy as npclass LOF:def __init__(self, data, k, epsilon=1.0):self.data = dataself.k = kself.epsilon = epsilonsel

【2020.8】【EMUI 9.1.0.139】用ADB禁止華為手機系統升級

EMUI升10,沒有重大功能更新,反而很多APP不相容,所以不想升級。結果開始自動下載5個多G的升級包,然後天天催我更新,後來找到方法刪掉了升級包,關掉了自動更新,結果依然天天催我更新。催的煩了,就找了個方法徹

實踐Kong for Kubernetes(K8S),kong最新2.1版本和kong-ingress-controller:0.9.1版本

先決條件 Kubernetes叢集:您可以使用Minikube或GKE叢集。Kong與Kubernetes的所有發行版相容。

時序預測 02 - 異常檢測 同比(chain) 方法的一些實踐、調參總結

參考連結 https://blog.csdn.net/Jasminexjf/article/details/88527966 一點調參總結 window: 同期比較的滑動視窗大小, 建議乘上週期數,再乘上一定的倍數; 如週期為7天,可以設定為7*4,適當擴大參考範圍.

centos7.5-docke安裝(2020.9.1

Centos7上安裝dockerDocker從1.13版本之後採用時間線的方式作為版本號,分為社群版CE和企業版EE。社群版是免費提供給個人開發者和小型團體使用的,企業版會提供額外的收費服務,比如經過官方測試認證過的基礎設施、容

9.1做JS的題目(2)

1.以下語句的執行結果是什麼? 最後執行settimeout所以是one two three 2.varstr1=newRegExp(\"e\");document.write(str1.exec(\"hello\"));以上程式碼輸出結果為()

Gitlab 11.9.1 高可用教程

Gitlab 11.9.1 高可用教程 一、 PostgreSQL資料遷移 由於預設Gitlab的安裝會內建Postgres資料庫,並且沒有對外,所以我們需要通過設定對應的Gitlab的配置將其中的資料庫對外,

Gitlab 11.9.1 安裝教程

Gitlab 11.9.1 安裝教程 一、CentOS設定 1. 更換阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

Logstash 7.9.1 學習

個人學習筆記,謝絕轉載!!! 原文:https://www.cnblogs.com/wshenjin/p/13666614.html 安裝和配置

使用Elasticsearch 7.9.1實現對word,pdf,txt檔案的全文內容檢索

簡單介紹一下需求 能支援檔案的上傳,下載 要能根據關鍵字,搜尋出文件,要求要能搜尋到檔案裡的文字,檔案型別要支援word,pdf,txt

浙大版《C語言程式設計(第3版)》題目集 習題9-1 時間換算

- - -》博主推薦,學生黨、程式設計師必備,點選檢視- - - >>>>> 熱門文章推薦

Elasticsearch7.9.1 學習

個人學習筆記,謝絕轉載!!! 原文:https://www.cnblogs.com/wshenjin/p/13816873.html 索引:

使用Python進行異常檢測

作者|Rashida Nasrin Sucky 編譯|VK 來源|Towards Datas Science 異常檢測可以作為異常值分析的一項統計任務來處理。但是如果我們開發一個機器學習模型,它可以像往常一樣自動化,可以節省很多時間。

ml-6-1-應用機器學習的建議Advice for Applying Machine Learning

應用機器學習的建議Advice for Applying Machine Learning Deciding What to Try Next 具體來講,我將重點關注的問題是假如你在開發一個機器學習系統,或者想試著改進一個機器學習系統的效能,你應如何決定

ml-9-2-推薦系統( ( Recommender Systems) )

推薦系統( ( Recommender Systems) ) 問題形式化Problem Formulation 從一個例子開始定義推薦系統的問題。假使我們是一個電影供應商,我們有 5 部電影和 4 個使用者,我們要求使用者為電影打分。