【算法】異常檢測

異常檢測

異常檢測(Anomaly Detection):異常檢測就是從數(shù)據(jù)集中檢測出異常樣本晌砾,是一種無監(jiān)督學習咙好。

引例

飛機制造商在飛機引擎從生產線上流出時温学,會考慮進行異常檢測,以防止不合格引擎對整機造成的巨大影響孽查,而為了進行異常檢測琐簇,通常就需要采集一些特征,比如會采集如下特征:

  1. x^1=引擎運轉時產生的熱量
  2. x^2=引擎的振蕩頻率

對于一系列的數(shù)據(jù)集(特征向量集合):{x^{(1)},?,x^{(m)} }{x^{(1)},?,x^{(m)} }, 這些數(shù)據(jù)都是正常樣本沃于,我們將其繪制到二維平面上:

飛機引擎數(shù)據(jù)集

如果一個新的測試樣本居于樣本布密度較大的地方如:

正常飛機引擎

那么我們有很大的把握認為這個測試樣本是正常的。
反之如果一個新的測試樣本遠離分布集中的地方如:

異常飛機引擎

那么我們也有很大的把握認為這個測試樣本是正常的海诲。

小結:
如果我們擁有一個測試集{x^{(1)},?,x^{(m)} },我們根據(jù)已知的數(shù)據(jù)集建立模型p(x)繁莹,該模型可以將正常樣本與異常樣本分離。

斷言

建立模型

高斯分布(正態(tài)分布)

正態(tài)分布可以表示成X~N(\mu,\delta^2),表示X服從均值為\mu,方差為\delta^2的正態(tài)分布特幔。
P(x;\mu,\delta^2)=\frac{1}{\sqrt{2\pi}\delta}exp(-\frac{(x-\mu)^2}{2\delta^2})
參數(shù)估計:
若有{x^{(1)},?,x^{(m)} } 咨演,x^{(i)}~N(\mu,\delta^2)
\mu=\frac{1}{m}\Sigma_{i=1}^mx^{(i)}\\ \delta^2=\frac{1}{m}\Sigma_{i=1}^m(x^{(i)}-\mu)^2
證明可以中最大似然估計。

異常檢測算法

訓練集:{x^{(1)},?,x^{(m)} } 蚯斯,x^{(i)}~N(\mu_i,\delta^2_i)
建立模型:
P(X)=P(x^{(1)};\mu_1,\delta^2_1)*,...,*P(x^{(m)};\mu_m,\delta^2_m)\\ =\Pi_{i=1}^mP(x^{(i)};\mu_i,\delta^2_i)~~~~~~~~~~~~~~~~~~~~~~~
參數(shù)擬合:
\mu_j=\frac{1}{m}\Sigma_{i=1}^mx^{(i)}_j\\ \delta^2_j=\frac{1}{m}\Sigma_{i=1}^m(x^{(i)}_j-\mu_j)^2
計算P(X)
P(X)=\Pi_{j=1}^n\frac{1}{\sqrt{2\pi}\delta_j}exp(-\frac{(x_j-\mu_j)^2}{2\delta^2_j})
判斷P(X)是否小于\epsilon薄风,若小于\epsilon則為異常饵较。

異常檢測算法的評估

  1. 對數(shù)據(jù)按6:2:2比例進行分配,分別為訓練集,交叉驗證集遭赂,測試集循诉,訓練集中全是無標簽數(shù)據(jù),異常數(shù)據(jù)在交叉驗證集與測試集中按比例進行分配
  2. 通過訓練集對參數(shù)進行擬合
  3. 對交叉驗證集和測試集中的數(shù)據(jù)進行測試
  4. 由于異常樣本的數(shù)量非常的少撇他,導致預測十分偏斜茄猫,可以通過考察準確率,召回率困肩,F(xiàn)1值來評估模型的效果划纽。
  5. 通過交叉驗證集來調節(jié)參數(shù)\epsilon

異常檢測與監(jiān)督學習

因為我們可能已經知道了訓練數(shù)據(jù)是否為異常數(shù)據(jù),那么就難免有個疑惑我們?yōu)槭裁床挥帽O(jiān)督學習的算法比如logistics regression來做呢僻弹?
下面我們來比較一下異常檢測與監(jiān)督學習

項目 異常檢測 邏輯回歸
樣本 異常樣本數(shù)量少(0~20)阿浓,大量負樣本 正負樣本數(shù)量都很多
應用 欺詐檢測,工業(yè)制造蹋绽,數(shù)據(jù)中心的監(jiān)測機器 垃圾郵件分類芭毙,天氣預報,癌癥判斷

注:大量的正樣本可以讓算法學習到正樣本的特征卸耘,并且肯能出現(xiàn)的正樣本與訓練集中的正樣本相似退敦,而異常可能是從未出現(xiàn)過的異常蚣抗。

數(shù)據(jù)處理

通常我們先畫出特征值的柱狀圖侈百,看其是否接近與高斯分布,若不是我們可以對特征值進行相關的處理翰铡,使其接近于高斯分布钝域,例如取對數(shù),取冪等等锭魔。特征值的分布越接近高斯分布則算法的效果越好例证。

多元高斯分布

我們不再單獨考慮每個特征值的高斯分布而是考慮特征向量X的高斯分布
P(X;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{2}{n}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(X-\mu)^{\tau}\Sigma^{-1}(X-\mu))

算法流程

參數(shù)擬合
\mu=\frac{1}{m}\Sigma_{i=1}^m x^{(i)}\\ \Sigma = \frac{1}{m}\Sigma_{i=1}^m (x^{(i)}-\mu)(x^{(i)}-\mu)^{\tau}
剩下的流程同高斯分布相同。

高斯分布與多元高斯分布比較

高斯分布 多元高斯分布
需要手動創(chuàng)建新的特征去捕獲不正常變量值的組合 自動捕獲不同特征變量之間的相關性
運算亮小迷捧,適應n很大的情況织咧,即使m很小也可以運行的很好 計算量大,m必須大于n,通常當m>=10時才考慮

注:如果發(fā)現(xiàn)\Sigma是不可逆的一般有兩種情況

  • m< n
  • 有冗余變量(變量間存在線性相關的關系)

MatlabCode

參數(shù)擬合Code

function [mu sigma2] = estimateGaussian(X)
%ESTIMATEGAUSSIAN This function estimates the parameters of a 
%Gaussian distribution using the data in X
%   [mu sigma2] = estimateGaussian(X), 
%   The input X is the dataset with each n-dimensional data point in one row
%   The output is an n-dimensional vector mu, the mean of the data set
%   and the variances sigma^2, an n x 1 vector
% 

% Useful variables
[m, n] = size(X);

% You should return these values correctly
mu = zeros(n, 1);
sigma2 = zeros(n, 1);

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the mean of the data and the variances
%               In particular, mu(i) should contain the mean of
%               the data for the i-th feature and sigma2(i)
%               should contain variance of the i-th feature.
%
for i=1:n
    mu(i)=sum(X(:,i))/m;
end;

for i=1:n
    sigma2(i)=sum((X(:,i)-mu(i)).^2)/m;
end;  
% =============================================================
end

更新\epsilon

function [bestEpsilon bestF1] = selectThreshold(yval, pval)
%SELECTTHRESHOLD Find the best threshold (epsilon) to use for selecting
%outliers
%   [bestEpsilon bestF1] = SELECTTHRESHOLD(yval, pval) finds the best
%   threshold to use for selecting outliers based on the results from a
%   validation set (pval) and the ground truth (yval).
%

bestEpsilon = 0;
bestF1 = 0;
F1 = 0;

stepsize = (max(pval) - min(pval)) / 1000;
for epsilon = min(pval):stepsize:max(pval)
    
    % ====================== YOUR CODE HERE ======================
    % Instructions: Compute the F1 score of choosing epsilon as the
    %               threshold and place the value in F1. The code at the
    %               end of the loop will compare the F1 score for this
    %               choice of epsilon and set it to be the best epsilon if
    %               it is better than the current choice of epsilon.
    %               
    % Note: You can use predictions = (pval < epsilon) to get a binary vector
    %       of 0's and 1's of the outlier predictions
    predicted = (pval<epsilon);
    truepostive = sum((predicted==1)&(yval==1));
    falsepostive = sum((predicted==1)&(yval==0));
    falsenegative = sum((predicted==0)&(yval==1));
    pre = truepostive/(truepostive+falsepostive);
    rec = truepostive/(truepostive+falsenegative);
    F1 = 2*pre*rec/(pre+rec);
    % =============================================================

    if F1 > bestF1
       bestF1 = F1;
       bestEpsilon = epsilon;
    end
end

end

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末漠秋,一起剝皮案震驚了整個濱河市笙蒙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庆锦,老刑警劉巖捅位,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡绿渣,警方通過查閱死者的電腦和手機朝群,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來中符,“玉大人姜胖,你說我怎么就攤上這事〉砩ⅲ” “怎么了右莱?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長档插。 經常有香客問我慢蜓,道長,這世上最難降的妖魔是什么郭膛? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任晨抡,我火速辦了婚禮,結果婚禮上则剃,老公的妹妹穿的比我還像新娘耘柱。我一直安慰自己,他們只是感情好棍现,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布调煎。 她就那樣靜靜地躺著,像睡著了一般己肮。 火紅的嫁衣襯著肌膚如雪士袄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天谎僻,我揣著相機與錄音娄柳,去河邊找鬼。 笑死艘绍,一個胖子當著我的面吹牛西土,可吹牛的內容都是我干的。 我是一名探鬼主播鞍盗,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跳昼!你這毒婦竟也來了般甲?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹅颊,失蹤者是張志新(化名)和其女友劉穎敷存,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡锚烦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年觅闽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮俄。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛉拙,死狀恐怖,靈堂內的尸體忽然破棺而出彻亲,到底是詐尸還是另有隱情孕锄,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布苞尝,位于F島的核電站畸肆,受9級特大地震影響,放射性物質發(fā)生泄漏宙址。R本人自食惡果不足惜轴脐,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抡砂。 院中可真熱鬧大咱,春花似錦、人聲如沸舀患。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聊浅。三九已至餐抢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間低匙,已是汗流浹背旷痕。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顽冶,地道東北人欺抗。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像强重,于是被迫代替她去往敵國和親绞呈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容