衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用MATLAB進行異常檢測(下)

MATLAB ? 來源:MATLAB ? 作者:MATLAB ? 2022-11-24 10:46 ? 次閱讀

在使用 MATLAB 進行異常檢測(上)中,我們探討了什么是異常值,簡單的一維數據異常檢測問題,針對高維數據的有監督異常檢測方法。 在(下)篇中,我們將和大家一起探討無監督異常檢測。

沒有標簽怎么辦?試試無監督異常檢測

參考文檔頁面:Unsupervised Anomaly Detection[1]

對于沒有標簽信息的多變量樣本數據,在MATLAB 可以使用以下方法檢測異常值:

· 馬氏距離 (Mahalanobis Distance):

如果數據符合多變量正態分布,可使用樣本到數據集分布中心的馬氏距離檢測異常。利用穩健協方差估計robustcov[2]函數計算馬氏距離,進行離群值檢測。

· 局部離群因子 (Local Outlier Factor, LOF):

基于觀測點和鄰近樣本之間的相對密度檢測異常點。利用 lof[3] 函數可以創建 LocalOutlierFactor 對象,針對訓練數據,直接返回檢測結果。

· 孤立森林 (Isolation forest):

通過一組孤立樹模型,將異常值和正常數據點隔離。利用 iforest[4] 函數,創建 IsolationForest 對象,針對訓練數據,直接返回檢測結果。

· 單類支持向量機 (One Class SVM):

在無監督條件下,訓練支持向量機模型,在變換后的高維空間,將數據點和原點分離。利用 ocsvm[5] 函數創建OneClassSVM 對象,針對訓練數據,直接返回檢測結果。

針對測試數據進行異常檢測時,使用第一種方法的具體檢測步驟將在下文中通過示例說明,如果使用另外三種算法,可以直接調用檢測模型的對象函數 isanomaly()。

具體實現方式

1.利用馬氏距離檢測異常值

【定義】馬氏距離:一種衡量樣本和數據集分布間相似度的尺度無關的度量指標,例如y到中值點的距離是d2=(y-μ)Σ-1(y-μ)',其中Σ是多維隨機變量的協方差矩陣,μ為樣本均值。在MATLAB中可通過pdist2函數計算:

d = pdist2(feat,mean(feat),"mahalanobis");

馬氏距離可以理解為是對歐式距離的一種修正,假設,下圖中藍色點和黃色點離樣本均值的歐式距離相近,但是由于樣本整體分布沿 f(x)=x 的方向分布(變量之間具有相關性),藍色點更有可能是數據集中的點,對應的馬氏距離更小,而黃色點更有可能是離群值,對應馬氏距離也更大。因此,設定一個合理的閾值,可以劃分異常樣本和正常樣本。

312cde4c-6b18-11ed-8abf-dac502259ad0.png

計算馬氏距離,首先需要估計 Σ(sig) 和 μ(mu) 。極大似然估計(Maximum Likelihood Estimation, MLE)對數據中的異常值非常敏感,需要采取一種穩健的協方差估計方法,抵抗數據集中存在的異常觀測數據。當數據中存在異常值時,協方差行列式偏大。使用最小協方差行列式估計 (Minimum Covariance Determinant, MCD),從 n 個數據樣本中,最多選取h個觀測值,找到協方差行列式最小的一組觀測子集,計算其平均值和協方差,作為估計量。robustcov 函數提供了 FAST-MCD、OGK 和 Olive-Hawkins 三種算法供選擇。假設訓練數據集中,異常占比為 0.9%:

contaminationFraction = 0.09;
[sig,mu,mah,tf] = robustcov(feat, ...
  OutlierFraction=contaminationFraction);

如果數據符合正態分布的假設,馬氏距離的平方值,將服從具有 Dim 個自由度的χ2分布,Dim 為原數據的維度。默認情況下,robustcov 函數假設數據符合多變量正態分布,并根據χ2分布的臨界值,將輸入樣本的 2.5% 作為異常值,如需調整異常值占比,可以使用 chi2inv 函數,重新計算閾值:

mah_threshold = sqrt(chi2inv(1-contaminationFraction,Dim));
tf_robustcov = mah > mah_threshold;

利用pdist2函數,計算測試集的馬氏距離后與閾值mah_threshold進行比較:

dTest = pdist2(featureTestNoLabels.Variables, ...
mean(featureTestNoLabels.Variables),"mahalanobis");
isanomalyTest = dTest > mah_threshold;
predTest = categorical(isanomalyTest, [1, 0], ["Anomaly", "Normal"]);

可視化檢測結果:

tiledlayout(3,1)
nexttile
gscatter(X(:,1),X(:,2),tf_robustcov,[],'ox',3)
xlabel('X1')
ylabel('X2')
legend({'正常','異常'})
title("訓練樣本分類結果 (tSNE降維)")


nexttile
plot(d,mah,'o')
line([mah_threshold, mah_threshold], [0, 30], 'color', 'r')
line([0, 6], [mah_threshold, mah_threshold], 'color', 'r')
hold on
plot(d(tf), mah(tf), 'r+')
xlabel('Mahalanobis Distance')
ylabel('Robust Distance')
title('DD Plot')
hold off


nexttile
confusionchart(trueAnomaliesTest, predTest, ...
  Title="測試結果評估-混淆矩陣 (馬氏距離)", Normalization="row-normalized");
314d5cee-6b18-11ed-8abf-dac502259ad0.jpg ? ? ? ?

小結

·以上方法在高維數據上應用效果不理想,可以看到,測試集中異常數據假陰率高。這個方法適用于數據符合或接近正態分布的情況,但是通常情況下,實際數據的分布規律難以預估。

2.局部離群因子

參考文檔頁面:Local outlier factor model for anomaly detection[6]

該算法通過計算樣本p和其周圍 k 個近鄰點的局部可達密度(local reachability density, lrd),即觀測樣本 p 到近鄰點的局部可達距離平均值的倒數:

31833666-6b18-11ed-8abf-dac502259ad0.png

其中,為k近鄰集合,樣本p關于觀測點o的局部可達距離定義為:

319644e0-6b18-11ed-8abf-dac502259ad0.png

其中 dk(0)為觀測點到其近鄰的第k個最小距離, d(p,0) 為樣本 p 和觀測點 o 之間的距離,可參考下圖示意。

31b186c4-6b18-11ed-8abf-dac502259ad0.png

再根據p的局部可達密度與近鄰點的局部可達密度比值的平均值,量化每個樣本的離群程度,具體計算可參考以下公式:

31d2677c-6b18-11ed-8abf-dac502259ad0.png

Ird(·)為局部可達密度函數,|Nk(p)|為近鄰數量。

因此,對于正常樣本,一般 LOF 值小于或接近 1,意味著其局部可達密度和近鄰點相近或更高,該樣本和鄰域內的樣本同屬一個簇,當 LOF 值大于 1 時,則可能為異常值,利用 ContaminationFraction 參數可調整 LOF 的閾值。

[mdlLOF,tfLOF,scoresLOF] = lof(feat, ...
  ContaminationFraction=0.09, ...
  NumNeighbors=1000, Distance="mahalanobis");
[isanomalyLOF,~] = isanomaly(mdlLOF, featureTestNoLabels.Variables);
predLOF = categorical(isanomalyLOF, [1, 0], ["Anomaly", "Normal"]);

可視化檢測結果:

tiledlayout(3,1)
nexttile
gscatter(X(:,1),X(:,2),tfLOF,[],'ox',3)
xlabel('X1')
ylabel('X2')
legend({'正常','異常'})
title("訓練樣本分類結果 (tSNE降維)")

隨機選取部分樣本,查看對應 LOF 值/異常得分

nexttile
idxes = randi(NumSamples,1,60);
scatter(X(idxes,1),X(idxes,2),5,'filled','MarkerFaceColor','k')
hold on
bubblechart(X(idxes,1),X(idxes,2),scoresLOF(idxes)/100, ...
'r','MarkerFaceAlpha',0);
legend({'數據點','異常得分'})
hold off
title("訓練樣本異常得分分布")


nexttile
confusionchart(trueAnomaliesTest, predLOF, ...
  Title="測試結果評估-混淆矩陣 (LOF)", Normalization="row-normalized");
31e8681a-6b18-11ed-8abf-dac502259ad0.jpg ? ? ? ?

小結

·優點:不受數據分布的影響,同時考慮了數據集的局部和全局屬性,比較適用于中等高維的數據集,針對示例數據集的預測準確度比較理想。

·使用限制:對近鄰參數較為敏感,由于需要計算數據集中任意兩個數據點的距離,算法的時間復雜度較高,在大規模數據集上效率偏低,適合小規模到中等規模的數值型數據。

3.孤立森林

參考文檔頁面:Anomaly Detection with Isolation Forest[7]

孤立森林算法中,集成了多個決策樹模型,訓練時,每個決策樹對一個不放回采樣的數據子集進行分裂,以試圖將每一個觀測樣本劃分到一個對應的葉節點上。假設異常點與其他正常數據差異較大,從根節點到對應葉節點需要經過的路徑長度(path length) 相對較短,對于每個樣本,將孤立森林中的多個決策樹路徑長度的平均值,定義為對應樣本的異常得分(anomaly score)。

32067832-6b18-11ed-8abf-dac502259ad0.png

[mdlIF,tfIF,scoreTrainIF] = iforest(feat, ContaminationFraction=0.09);
[isanomalyIF,~] = isanomaly(mdlIF, featureTestNoLabels.Variables);
predIF = categorical(isanomalyIF, [1, 0], ["Anomaly", "Normal"]);

可視化檢測結果:

tiledlayout(3,1)
nexttile
gscatter(X(:,1),X(:,2),tfIF,[],'ox',3)
xlabel('X1')
ylabel('X2')
legend({'正常','異常'})
title("訓練樣本分類結果 (tSNE降維)")


nexttile
histogram(scoreTrainIF)
xline(mdlIF.ScoreThreshold,"k-",join(["Threshold =" mdlIF.ScoreThreshold]))
title("訓練樣本異常得分分布")


nexttile
confusionchart(trueAnomaliesTest, predIF, ...
  Title="測試結果評估-混淆矩陣 (孤立森林)", Normalization="row-normalized");
32274300-6b18-11ed-8abf-dac502259ad0.jpg ? ? ? ?

小結

·優點:適合高維表格數據,不需要計算關于距離和密度的指標,具有線性時間復雜度,每個決策樹可獨立采樣,支持并行化處理來實現加速。

·使用限制:孤立森林適用于訓練集和測試集中,正常樣本和異常樣本占比接近的情況,且異常樣本的特征與正常樣本差異很大。

4.單類支持向量機

參考文檔頁面:Fit one-class support vector machine (SVM) model for anomaly detection[8]

單類支持向量機,或無監督支持向量機,構建決策邊界,將訓練集中的數據點盡可能劃分為一個類別,位于決策邊界之外的數據則為異常值。

策略是通過核函數將數據映射到新的高維特征空間,在數據與原點間構建超平面(n 維平面)。因為,在低維空間中的非線性特征往往不是線性可分的,在擴展到高維空間后是可分的。在 MATLAB 中,一種實現方法是使用用于構建標準的支持向量機分類模型的 fitcsvm 函數(MATLAB R2022b前),另一種實現方法是使用 ocsvm 函數(MATLAB R2022b 起)。

fitcsvm 函數的求解是基于 SVM 的對偶問題形式,需要求解每對樣本的格拉姆矩陣(Gram Matrix),相關示例可在 MATLAB 命令行輸入以下指令打開:

>> openExample('stats/DetectOutliersUsingSVMAndOneClassLearningExample')
3256a9f6-6b18-11ed-8abf-dac502259ad0.png

ocsvm 函數的求解則是基于 SVM 的原型問題形式,并使用高斯核進行一類學習,以找到決策邊界,針對大規模數據集,求解效率更高。將 KernelScale 設為 "auto"以啟發式地選取合適核函數參數。

[mdlSVM,tfOCSVM,scoreTrainOCSVM] = ocsvm(feat, ...
    ContaminationFraction=0.09, ...
    StandardizeData=true,KernelScale="auto");
[isanomalyOCSVM,~] = isanomaly(mdlSVM, featureTestNoLabels.Variables);
predOCSVM = categorical(isanomalyOCSVM, [1, 0], ["Anomaly", "Normal"]);

可視化檢測結果:

tiledlayout(3,1)
nexttile
gscatter(X(:,1),X(:,2),tfOCSVM,[],'ox',3)
xlabel('X1')
ylabel('X2')
legend({'正常','異常'})
title("訓練樣本分類結果 (tSNE降維)")


nexttile
histogram(scoreTrainOCSVM, Normalization="probability")
xline(mdlSVM.ScoreThreshold,"k-", ...
  join(["Threshold =" mdlSVM.ScoreThreshold]))
title("訓練樣本異常得分分布")


nexttile
confusionchart(trueAnomaliesTest, predOCSVM,...
  Title="測試結果評估-混淆矩陣 (OCSVM)", Normalization="row-normalized");
3291374c-6b18-11ed-8abf-dac502259ad0.jpg ? ? ? ?

小結

·優點:可以處理高維數據,適合表格/結構化數據。

·使用限制:分類變量需要先轉換為虛擬變量(啞變量,Dummy Variable),ocsvm函數中可定義相關參數CategoricalPredictors ,以自動進行轉換。

結果對比

在該數據集的離群值檢測問題中,孤立森林、局部離群因子與單類支持向量機的結果比較接近,各自的準確度都比較理想,預測結果的重合度也超過了90%:

mean((predIF==predLOF) & (predLOF==predOCSVM))

ans = 0.9325

利用馬氏距離/穩健協方差估計的方法,結果不理想,與其他三個算法的結果差異較大:

mean((predIF==predLOF) & (predLOF==predOCSVM) & (predOCSVM==predTest))

ans = 0.6196

綜上,各個方法的適用范圍不一,或是有特定的使用條件,在使用時需要多加留意,例如馬氏距離適合符合正態分布假設的數據集,孤立森林適用于處理正常樣本和異常樣本差異較大的情況,各個算法計算復雜度有些許區別,可以根據實際情況選擇合適的方法。

關鍵點回顧

·在處理異常檢測問題時,首先需要充分了解您的數據

·如果您有足夠的標注數據(包括異常),可使用有監督學習方法進行異常檢測

·如果您的數據大部分都是正常數據,或者異常數據難以獲取或標記,則可以考慮使用無監督的異常檢測方法

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    185

    文章

    2980

    瀏覽量

    231007
  • 異常檢測
    +關注

    關注

    1

    文章

    42

    瀏覽量

    9754
  • 機器學習
    +關注

    關注

    66

    文章

    8438

    瀏覽量

    133084

原文標題:機器學習應用 | 使用 MATLAB 進行異常檢測(下)

文章出處:【微信號:MATLAB,微信公眾號:MATLAB】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    matlab2009載地址

    作為一個標準的管理異常來處理。MATLAB R2009b新版本中,產品模塊進行了一些調整,MATLAB Builder for COM的功能集成到M
    發表于 03-22 18:10

    如何使用部分異常觀測數據進行異常檢測

    使用部分異常觀測數據進行異常檢測(翻譯自 Anomaly Detection with Partially Observed Anomalies)
    發表于 04-26 14:37

    如何利用MATLAB和Simulink進行S模式檢測和解碼?

    如何利用MATLAB和Simulink進行S模式檢測和解碼?
    發表于 05-18 07:17

    如何利用MATLAB和Simulink去進行S模式檢測和解碼?

    如何利用MATLAB和Simulink去進行S模式檢測和解碼?
    發表于 05-20 06:31

    基于密集人群的異常實時檢測

    在密集人群場景,針對現有異常檢測算法在實時性和適用性方面的不足,提出了一種基于光流特征和卡爾曼濾波的實時檢測方法。該方法首先提取圖像的全局光流強度作為運動特征;然后對全局光流值
    發表于 12-18 15:02 ?0次下載

    檢測域劃分的虛擬機異常檢測算法

    虛擬機的正常運行是支撐云平臺服務的重要條件,由于云平臺下虛擬機存在數量規模大、運行環境隨時間動態變化的特點,管理系統難以針對每個虛擬機進行訓練數據采集以及統計模型的訓練。為了提高在上述環境異常
    發表于 12-20 09:48 ?0次下載

    密度偏倚抽樣的局部距離異常檢測算法

    異常檢測是數據挖掘的重要研究領域,當前基于距離或者最近鄰概念的異常數據檢測方法,在進行海量高維數據異常
    發表于 12-25 14:11 ?0次下載

    AIS數據在船舶異常行為檢測

    規律和進行船舶異常行為檢測提供了新的途徑。本文對近年來AIS數據在船舶異常行為檢測方面的研究進展和所取得的成果
    發表于 01-08 15:11 ?1次下載

    如何進行雙側空間窗的異常檢測詳細方法概述

    針對現有異常檢測方法難以解釋異常屬性的問題,本文提出基于雙側空間窗的異常檢測方法。首先,在前景檢測
    發表于 01-11 15:17 ?3次下載
    如何<b class='flag-5'>進行</b>雙側空間窗的<b class='flag-5'>異常</b><b class='flag-5'>檢測</b>詳細方法概述

    什么是異常檢測_異常檢測的實用方法

    異常檢測是一個發現“少數派”的過程,由于它們與大多數數據不一樣而引起我們的注意。在幾個典型場景中,異常數據能為我們關聯到一些潛在的問題,如銀行欺詐行為、藥品問題、結構缺陷、設備故障等。這些關聯關系能幫助我們挑出哪些點可能是
    的頭像 發表于 06-29 09:25 ?1.9w次閱讀

    使用MATLAB進行線性編程

    使用MATLAB進行線性編程方法。
    發表于 05-27 09:29 ?0次下載

    如何選擇異常檢測算法

    異常檢測(也稱為離群點檢測)是檢測異常實例的任務,異常實例與常規實例非常不同。這些實例稱為
    的頭像 發表于 10-25 09:15 ?1737次閱讀

    使用MATLAB進行異常檢測(上)

    異常檢測任務,指的是檢測偏離期望行為的事件或模式,可以是簡單地檢測數值型數據中,是否存在遠超出正常取值范圍的離群值,也可以是借助相對復雜的機器學習算法識別數據中隱藏的
    的頭像 發表于 11-17 10:32 ?3635次閱讀

    采用基于時間序列的日志異常檢測算法應用

    新增、時段新增、時段突增、時段突降等多種異常。 然而,在實際中,日志指標時序數據并不都具有周期性,或具有其他分布特征,因此僅根據周期性進行異常檢測會導致誤報率高、準確率低等問題。因此如
    的頭像 發表于 12-09 10:47 ?1723次閱讀

    哈工大提出Myriad:利用視覺專家進行工業異常檢測的大型多模態模型

    最近,大型多模態(即視覺和語言)模型(LMM)在圖像描述、視覺理解、視覺推理等多種視覺任務上表現出了卓越的感知能力,使其成為更易于理解的異常檢測的有競爭力的潛在選擇。然而,現有的通用 LMM 中缺乏有關異常
    的頭像 發表于 11-21 16:08 ?2157次閱讀
    哈工大提出Myriad:利用視覺專家<b class='flag-5'>進行</b>工業<b class='flag-5'>異常</b><b class='flag-5'>檢測</b>的大型多模態模型
    百家乐官网谁能看准牌| 南江县| 仙桃市| 玩百家乐官网技巧巧| 百家乐真人游戏网上投注| 粤港澳百家乐赌场娱乐网规则 | 乐百家乐官网彩娱乐城| 百家乐官网稳赢秘诀教学| 金城百家乐玩法平台| 大发888 的用户名| 太阳城百家乐官网怎样开户| 百家乐官网高手和勒威| 百家乐合作代打| 太阳城百家乐官网公司| 广州百家乐扫描分析| 百家乐有真假宝单吗| 大发888充值卡| 百家乐官网视频游戏帐号| 做生意店铺缺西北角| 康莱德百家乐的玩法技巧和规则 | 百家乐官网赌博怎么玩| 网上百家乐骗人| 全讯网社区| 百家乐官网平台注册送彩金| 百家乐开放词典新浪| 顶级赌场官方直营网| 百家乐官网赌场规则| 网上百家乐有哪些玩法| 武夷山市| 澳门百家乐海星王| 六合彩历史开奖记录| 百家乐官网强对弱的对打法| 百家乐送钱平台| 缅甸百家乐官网网络赌博解谜| 真人百家乐蓝盾娱乐场| 百家乐官网好多假网站| 百家乐视频看不到| e世博官网| 网上百家乐真实吗| 田阳县| 武汉百家乐赌具|