最近我去了一個(gè)關(guān)于流處理的演講,但是該演講的用例(use case)是關(guān)于異常檢測。當(dāng)他們開始談?wù)摕o監(jiān)督?jīng)Q策樹時(shí),我的天線就豎起來了。無監(jiān)督?jīng)Q策樹是什么意思?它們會分裂出什么?
事實(shí)證明,在異常檢測領(lǐng)域,無監(jiān)督?jīng)Q策樹的應(yīng)用是相當(dāng)普遍的。但是因?yàn)槲也⒉粡氖略擃I(lǐng)域的相關(guān)工作,而且我懷疑我們中也很少有人在從事該領(lǐng)域的工作,所以我覺得我有必要分享下我發(fā)現(xiàn)的東西。
異常 VS 稀疏數(shù)據(jù)
幾周前,我們介紹了處理不平衡數(shù)據(jù)集的技術(shù)。對于數(shù)據(jù)集不平衡到什么程度應(yīng)被歸為異常這個(gè)問題,人們并沒有統(tǒng)一的標(biāo)準(zhǔn)。就像判斷藝術(shù)的偉大與否,你看到的時(shí)候你就知道了。
這里我們作為例證的異常指的是入侵檢測中的異常。雖然這些異常一天之內(nèi)會出現(xiàn)好多次,但是跟常規(guī)的網(wǎng)頁日志和系統(tǒng)數(shù)據(jù)包所產(chǎn)生的巨量數(shù)據(jù)相比,但是這些數(shù)據(jù)還是很少見的。具體到人的生活當(dāng)中,異??梢允切庞每ㄔp欺事件和正常 CT 掃描中發(fā)現(xiàn)癌癥。
如果你認(rèn)為你的用例介于稀疏和異常之間,那么就按照我們所做的一樣,將兩種方法都試一下,看看哪個(gè)最好。
監(jiān)督 VS 無監(jiān)督
在異常檢測中,我們試圖識別與數(shù)據(jù)集內(nèi)與預(yù)期模式不匹配且根據(jù)定義很少的項(xiàng)目或事件。入侵檢測系統(tǒng)中廣泛地采用了‘基于特征碼(signature based)’的方法來創(chuàng)建用于正常的監(jiān)督技術(shù)中的訓(xùn)練數(shù)據(jù)。當(dāng)監(jiān)測到攻擊時(shí),相關(guān)的流量模式就會被記錄、標(biāo)記和人為地被分類為一次入侵,然后這些數(shù)據(jù)會與正常數(shù)據(jù)結(jié)合起來,用于創(chuàng)建監(jiān)督訓(xùn)練集。
不論是受監(jiān)督?jīng)Q策樹、無監(jiān)督?jīng)Q策樹或者是由二者形成的隨機(jī)森林,均可用作異常檢測的工具。決策樹是非參數(shù)的,也不會對數(shù)據(jù)的分布做出假設(shè)。它們擅長將數(shù)字和分類相結(jié)合,高效地去處理缺失的數(shù)據(jù)。所有類型的異常數(shù)據(jù)往往都是高維度數(shù)據(jù),而決策樹可以將其全部納入其中,并提供合理清晰的指導(dǎo),以便在修剪(pruning)后僅留下重要信息。
完整的來說,還有一類半監(jiān)督異常檢測,其訓(xùn)練數(shù)據(jù)僅由正常事務(wù)組成,不包含任何異常。這也被稱為‘一類分類(One Class Classification)’,并以稍微不同的方式使用一類 SVM 或自動編碼器,在這里就不討論。
事實(shí)上,有監(jiān)督方法在入侵檢測方面仍然比無監(jiān)督方式更精確,但是它們完全無法確定新的或許有嚴(yán)重威脅的零時(shí)差(zero-day)攻擊。
無監(jiān)督?jīng)Q策樹
無監(jiān)督?jīng)Q策樹的概念其實(shí)有點(diǎn)誤導(dǎo)性,因?yàn)樗鋵?shí)是一個(gè)無監(jiān)督的聚類算法的組合,通過創(chuàng)建第一個(gè)關(guān)于好壞的猜測,來決定決策樹應(yīng)該在何處分裂。
步驟一:對您的數(shù)據(jù)運(yùn)行一個(gè)聚類算法。我在嘗試了幾乎所有的聚類技術(shù)后,似乎舊的 k-NN 仍然是最好的。設(shè)定 K=2 似乎很誘人,但是鑒于可能存在多種不同類型的入侵,預(yù)期好的結(jié)果是不現(xiàn)實(shí)的。實(shí)際的指導(dǎo)是將 K 至少設(shè)置為 10,并且對值進(jìn)行高達(dá) 50 的試驗(yàn)。在此過程中,因?yàn)閿?shù)據(jù)是未標(biāo)記的,所以沒有能夠確定最佳聚類的目標(biāo)函數(shù)。
雖然在文獻(xiàn)中并沒有涉及,但是我們有很好的理由去嘗試一下早期關(guān)于不平衡數(shù)據(jù)集的文章中討論過的 SMOTE (Synthetic Minority Oversampling Technique),因?yàn)樵摷夹g(shù)的主要目的是澄清聚類之間的界限。
步驟二:記錄了數(shù)據(jù)中的聚類后,以正常的方式運(yùn)行決策樹。顯然的是,如果 K 很大,那么這將是一個(gè)多級問題,就需要通過解釋閾值來發(fā)現(xiàn)異常。
從圖中 ROC 曲線可以看出比照乳腺癌檢測基準(zhǔn)數(shù)據(jù),k-NN 方法得到的結(jié)果是很不錯(cuò)的(請注意 AUC 軸在 0.5 時(shí)截止)。
異常檢測無監(jiān)督?jīng)Q策樹的實(shí)際執(zhí)行其實(shí)更為復(fù)雜,還會有關(guān)于不同類型異常的問題、數(shù)據(jù)規(guī)范化過程以及基準(zhǔn)數(shù)據(jù)集本身的變化等多方面的問題。如果你想深入研究這一點(diǎn),我建議你可以去閱讀下本文摘錄圖表的原文,該文比較了各種數(shù)據(jù)集中八種不同的技術(shù)。
最佳實(shí)踐
如果你想對此進(jìn)行探索,那么用已存在的無監(jiān)督隨機(jī)森林的 Python 腳本,會讓這個(gè)過程更容易一些。另外,我聽的演講來自于戴爾 EMC 的新興技術(shù)部(Emerging Technologies Division)的首席解決方案架構(gòu)師 Boni Bruno。他描述的場景是通過監(jiān)測每個(gè)單獨(dú)的地點(diǎn),來實(shí)現(xiàn)在世界范圍內(nèi)分布的遍及全球各地的數(shù)據(jù)中心進(jìn)行異常監(jiān)測。
該技術(shù)體系結(jié)構(gòu)的核心是 Spark Streaming。流(stream)中的一個(gè)操作會包含有基于 Python 無監(jiān)督隨機(jī)森林腳本的監(jiān)測算法。警報(bào)通知會在監(jiān)測到入侵后,不到 5 秒之內(nèi)發(fā)出。
同樣有意思的是,該系統(tǒng)的設(shè)定是每 24 小時(shí)收集一個(gè)新的(真正的大數(shù)據(jù))數(shù)據(jù)集,來重新訓(xùn)練模型,以便實(shí)時(shí)捕獲任何新的零時(shí)差攻擊。
作者簡介:
Bill Vorhies 是一個(gè)數(shù)據(jù)科學(xué)中心的主編,自 2001 年起一直擔(dān)任數(shù)據(jù)科學(xué)家。他的聯(lián)系方式是:Bill@DataScienceCentral.com
原文鏈接:https://www.datasciencecentral.com/profiles/blogs/have-you-heard-about-unsupervised-decision-trees
來源:AI 前線
往期推薦
基于稀疏表示的半監(jiān)督學(xué)習(xí)方法的創(chuàng)新與應(yīng)用