當前位置:首頁 » 電腦故障 » 機器學習異常網路請求檢測
擴展閱讀
惠普電腦黑屏但有網 2025-04-23 12:47:30

機器學習異常網路請求檢測

發布時間: 2022-06-20 22:52:06

『壹』 基於機器學習的行人檢測方法有哪些

行人檢測方法太多。就現在來看的話,深度卷積神經網路綽綽有餘了。
不用深度學習的話,直接生成Object Proposal(表徵目標的大致位置),可以用Selective Search,bing或者Edgebox等,然後對proposal指向的圖像區域放縮後用支持向量機來分類也行。

再不濟的話連膚色檢驗這種笨方法也能有一定效果(不用寄予厚望)。

『貳』 如何檢測未知異常行為

漏洞掃描有以下四種檢測技術:
1.基於應用的檢測技術。它採用被動的、非破壞性的辦法檢查應用軟體包的設置,發現安全漏洞。
2.基於主機的檢測技術。它採用被動的、非破壞性的辦法對系統進行檢測。通常,它涉及到系統的內核、文件的屬性、操作系統的補丁等。這種技術還包括口令解密、把一些簡單的口令剔除。因此,這種技術可以非常准確地定位系統的問題,發現系統的漏洞。它的缺點是與平台相關,升級復雜。
3.基於目標的漏洞檢測技術。它採用被動的、非破壞性的辦法檢查系統屬性和文件屬性,如資料庫、注冊號等。通過消息文摘演算法,對文件的加密數進行檢驗。這種技術的實現是運行在一個閉環上,不斷地處理文件、系統目標、系統目標屬性,然後產生檢驗數,把這些檢驗數同原來的檢驗數相比較。一旦發現改變就通知管理員。
4.基於網路的檢測技術。它採用積極的、非破壞性的辦法來檢驗系統是否有可能被攻擊崩潰。它利用了一系列的腳本模擬對系統進行攻擊的行為,然後對結果進行分析。它還針對已知的網路漏洞進行檢驗。網路檢測技術常被用來進行穿透實驗和安全審記。這種技術可以發現一系列平台的漏洞,也容易安裝。但是,它可能會影響網路的性能。
網路漏洞掃描
在上述四種方式當中,網路漏洞掃描最為適合我們的Web信息系統的風險評估工作,其掃描原理和工作原理為:通過遠程檢測目標主機TCP/IP不同埠的服務,記錄目標的回答。通過這種方法,可以搜集到很多目標主機的各種信息(例如:是否能用匿名登錄,是否有可寫的FTP目錄,是否能用Telnet,httpd是否是用root在運行)。
在獲得目標主機TCP/IP埠和其對應的網路訪問服務的相關信息後,與網路漏洞掃描系統提供的漏洞庫進行匹配,如果滿足匹配條件,則視為漏洞存在。此外,通過模擬黑客的進攻手法,對目標主機系統進行攻擊性的安全漏洞掃描,如測試弱勢口令等,也是掃描模塊的實現方法之一。如果模擬攻擊成功,則視為漏洞存在。
在匹配原理上,網路漏洞掃描器採用的是基於規則的匹配技術,即根據安全專家對網路系統安全漏洞、黑客攻擊案例的分析和系統管理員關於網路系統安全配置的實際經驗,形成一套標準的系統漏洞庫,然後再在此基礎之上構成相應的匹配規則,由程序自動進行系統漏洞掃描的分析工作。
所謂基於規則是基於一套由專家經驗事先定義的規則的匹配系統。例如,在對TCP80埠的掃描中,如果發現/cgi-bin/phf/cgi-bin/Count.cgi,根據專家經驗以及CGI程序的共享性和標准化,可以推知該WWW服務存在兩個CGI漏洞。同時應當說明的是,基於規則的匹配系統有其局限性,因為作為這類系統的基礎的推理規則一般都是根據已知的安全漏洞進行安排和策劃的,而對網路系統的很多危險的威脅是來自未知的安全漏洞,這一點和PC殺毒很相似。
這種漏洞掃描器是基於瀏覽器/伺服器(B/S)結構。它的工作原理是:當用戶通過控制平台發出了掃描命令之後,控制平台即向掃描模塊發出相應的掃描請求,掃描模塊在接到請求之後立即啟動相應的子功能模塊,對被掃描主機進行掃描。通過分析被掃描主機返回的信息進行判斷,掃描模塊將掃描結果返回給控制平台,再由控制平台最終呈現給用戶。
另一種結構的掃描器是採用插件程序結構。可以針對某一具體漏洞,編寫對應的外部測試腳本。通過調用服務檢測插件,檢測目標主機TCP/IP不同埠的服務,並將結果保存在信息庫中,然後調用相應的插件程序,向遠程主機發送構造好的數據,檢測結果同樣保存於信息庫,以給其他的腳本運行提供所需的信息,這樣可提高檢測效率。如,在針對某FTP服務的攻擊中,可以首先查看服務檢測插件的返回結果,只有在確認目標主機伺服器開啟FTP服務時,對應的針對某FTP服務的攻擊腳本才能被執行。採用這種插件結構的掃描器,可以讓任何人構造自己的攻擊測試腳本,而不用去了解太多掃描器的原理。這種掃描器也可以用做模擬黑客攻擊的平台。採用這種結構的掃描器具有很強的生命力,如著名的Nessus就是採用這種結構。這種網路漏洞掃描器的結構如圖2所示,它是基於客戶端/伺服器(C/S)結構,其中客戶端主要設置伺服器端的掃描參數及收集掃描信息。具體掃描工作由伺服器來完成。

『叄』 1.什麼是誤用入侵檢測

入侵檢測(Intrusion Detection),顧名思義,就是對入侵行為的發覺。他通過對計算機網路或計算機系統中若干關鍵點收集信息並對其進行分析,從中發現網路或系統中是否有違反安全策略的行為和被攻擊的跡象。
入侵檢測系統(intrusion detection system,簡稱「IDS」)是一種對網路傳輸進行即時監視,在發現可疑傳輸時發出警報或者採取主動反應措施的網路安全設備。它與其他網路安全設備的不同之處便在於,IDS是一種積極主動的安全防護技術。 IDS最早出現在1980年4月。 1980年代中期,IDS逐漸發展成為入侵檢測專家系統(IDES)。 1990年,IDS分化為基於網路的IDS和基於主機的IDS。後又出現分布式IDS。目前,IDS發展迅速,已有人宣稱IDS可以完全取代防火牆。
入侵檢測系統檢測方法
異常檢測方法
在異常入侵檢測系統中常常採用以下幾種檢測方法:
基於貝葉斯推理檢測法:是通過在任何給定的時刻,測量變數值,推理判斷系統是否發生入侵事件。基於特徵選擇檢測法:指從一組度量中挑選出能檢測入侵的度量,用它來對入侵行為進行預測或分類。基於貝葉斯網路檢測法:用圖形方式表示隨機變數之間的關系。通過指定的與鄰接節點相關一個小的概率集來計算隨機變數的聯接概率分布。按給定全部節點組合,所有根節點的先驗概率和非根節點概率構成這個集。貝葉斯網路是一個有向圖,弧表示父、子結點之間的依賴關系。當隨機變數的值變為已知時,就允許將它吸收為證據,為其他的剩餘隨機變數條件值判斷提供計算框架。
基於模式預測的檢測法:事件序列不是隨機發生的而是遵循某種可辨別的模式是基於模式預測的異常檢測法的假設條件,其特點是事件序列及相互聯系被考慮到了,只關心少數相關安全事件是該檢測法的最大優點。
基於統計的異常檢測法:是根據用戶對象的活動為每個用戶都建立一個特徵輪廓表,通過對當前特徵與以前已經建立的特徵進行比較,來判斷當前行為的異常性。用戶特徵輪廓表要根據審計記錄情況不斷更新,其保護去多衡量指標,這些指標值要根據經驗值或一段時間內的統計而得到。
基於機器學習檢測法:是根據離散數據臨時序列學習獲得網路、系統和個體的行為特徵,並提出了一個實例學習法IBL,IBL是基於相似度,該方法通過新的序列相似度計算將原始數據(如離散事件流和無序的記錄)轉化成可度量的空間。然後,應用IBL學習技術和一種新的基於序列的分類方法,發現異常類型事件,從而檢測入侵行為。其中,成員分類的概率由閾值的選取來決定。
數據挖掘檢測法:數據挖掘的目的是要從海量的數據中提取出有用的數據信息。網路中會有大量的審計記錄存在,審計記錄大多都是以文件形式存放的。如果靠手工方法來發現記錄中的異常現象是遠遠不夠的,所以將數據挖掘技術應用於入侵檢測中,可以從審計數據中提取有用的知識,然後用這些知識區檢測異常入侵和已知的入侵。採用的方法有KDD演算法,其優點是善於處理大量數據的能力與數據關聯分析的能力,但是實時性較差。
基於應用模式的異常檢測法:該方法是根據服務請求類型、服務請求長度、服務請求包大小分布計算網路服務的異常值。通過實時計算的異常值和所訓練的閾值比較,從而發現異常行為。
基於文本分類的異常檢測法:該方法是將系統產生的進程調用集合轉換為「文檔」。利用K鄰聚類文本分類演算法,計算文檔的相似性。
誤用檢測方法
誤用入侵檢測系統中常用的檢測方法有:
模式匹配法:是常常被用於入侵檢測技術中。它是通過把收集到的信息與網路入侵和系統誤用模式資料庫中的已知信息進行比較,從而對違背安全策略的行為進行發現。模式匹配法可以顯著地減少系統負擔,有較高的檢測率和准確率。
專家系統法:這個方法的思想是把安全專家的知識表示成規則知識庫,再用推理演算法檢測入侵。主要是針對有特徵的入侵行為。
基於狀態轉移分析的檢測法:該方法的基本思想是將攻擊看成一個連續的、分步驟的並且各個步驟之間有一定的關聯的過程。在網路中發生入侵時及時阻斷入侵行為,防止可能還會進一步發生的類似攻擊行為。在狀態轉移分析方法中,一個滲透過程可以看作是由攻擊者做出的一系列的行為而導致系統從某個初始狀態變為最終某個被危害的狀態。

『肆』 基於機器學習的區塊鏈網路異常檢測 作為一個小白,應該從那方面來進行了解那,麻煩大佬指點一下,謝謝

個人覺得區塊鏈開發技術層面講就沒有靠譜之說,無非是你選擇什麼樣的研發技術團,即使你選擇了比較好的研發技術團,也未必能實現你所要求的區塊鏈技術,不同行業和領域有不同的技術指標,更何況這個復雜的新技術。另外一點還要讓研發技術團認同你需要應用的機器行業思維,否則開發出來的產品也不可能符合你的要求。我們專注區塊鏈技術專業領域落地,項目已經進行了一年多的時間,還沒有成功落地。難度在於推翻傳統模式會觸及很大的利益鏈條,所以必須是一個慢慢滲透的過程。

按照你講的:基於機器學習的區塊鏈,可以理解為你在問一個技術問題。


以上回答,希望對你有所幫助。

『伍』 機器學習中的數據預處理有哪些常見/重要的工具

大數據發展的挑戰: 目前大數據的發展依然存在諸多挑戰,包括七大方面的挑戰:業務部門沒有清晰的大數據需求導致數據資產逐漸流失;內部數據孤島嚴重,導致數據價值不能充分挖掘;數據可用性低,數據質量差,導致數據無法利用;數據相關管理技。

機器學習之常見的數據預處理:原始數據存在的幾個問題:不一致;重復;含雜訊;維度高。
1.1 數據挖掘中使用的數據的原則
盡可能賦予屬性名和屬性值明確的含義; 去除惟一屬性; 去除重復性; 合理選擇關聯欄位。
1.2 常見的數據預處理方法
數據清洗:數據清洗的目的不只是要消除錯誤、冗餘和數據噪音,還要能將按不同的、不兼容的規則所得的各種數據集一致起來。 數據集成:將多個數據源中的數據合並,並存放到一個一致的數據存儲(如數據倉庫)中。這些數據源可能包括多個資料庫、數據立方體或一般文件。
數據變換:找到數據的特徵表示,用維度變換來減少有效變數的數目或找到數據的不變式,包括規格化、規約、切換和投影等操作。 數據規約:是在對發現任務和數據本身內容理解的基礎上,尋找依賴於發現目標的表達數據的有用特徵,以縮減數據模型,從而在盡可能保持數據原貌的前提下最大限度的精簡數據量,主要有兩個途徑:屬性選擇和數據抽樣,分別針對資料庫中的屬性和記錄。
二、數據清洗
2.1 缺失值處理的兩種方法
刪除法,根據數據處理的不同角度,刪除法可分為以下4種:
(1)刪除觀測樣本 (2)刪除變數:當某個變數缺失值較多且對研究目標影響不大時,可以將整個變數整體刪除 (3)使用完整原始數據分析:當數據存在較多缺失而其原始數據完整時,可以使用原始數據替代現有數據進行分析; (4)改變權重:當刪除缺失數據會改變數據結構時,通過對完整數據按照不同的權重進行加工,可以降低刪除數據帶來的偏差。
插補法:在條件允許的情況下,找到缺失值的替代值進行插補,盡可能還原真實數據是更好的方法。常見的方法有均值插補、回歸插補、二階插補、熱平台、冷平台等單一變數插補。
(1)均值法是通過計算缺失值所在變數所有非缺失觀測值的均值,使用均值來代替缺失值的插補方法。 (2)均值法不能利用相關變數信息,因此會存在一定偏差,而回歸模型是將需要插補變數作為因變數,其他相關變數作為自變數,通過建立回歸模型預測出因變數的值對缺失變數進行插補。 (3)熱平台插補是指在非缺失數據集中找到一個與缺失值所在樣本相似的樣本(匹配樣本),利用其中的觀測值對缺失值進行插補。 (4)在實際操作中,尤其當變數數量很多時,通常很難找到與需要插補樣本完全相同的樣本,此時可以按照某些變數將數據分層,在層中對缺失值使用均值插補,即採取冷平台插補法。
2.2 雜訊數據處理
雜訊是一個測量變數中的隨機錯誤和偏差,包括錯誤值或偏離期望的孤立點值。
雜訊檢查中比較常見的方法:
(1)通過尋找數據集中與其他觀測值及均值差距最大的點作為異常 (2)聚類方法檢測,將類似的取值組織成「群」或「簇」,落在「簇」集合之外的值被視為離群點。 在進行雜訊檢查後,通常採用分箱、聚類、回歸、計算機檢查和人工檢查結合等方法「光滑」數據,去掉數據中的雜訊。
分箱:分箱方法是一種簡單常用的預處理方法,通過考察相鄰數據來確定最終值。所謂「分箱」,實際上就是按照屬性值劃分的子區間,如果一個屬性值處於某個子區間范圍內,就稱把該屬性值放進這個子區間所代表的「箱子」內。把待處理的數據(某列屬性值)按照一定的規則放進一些箱子中,考察每一個箱子中的數據,採用某種方法分別對各個箱子中的數據進行處理。在採用分箱技術時,需要確定的兩個主要問題就是:如何分箱以及如何對每個箱子中的數據進行平滑處理。
2.2.1 分箱的方法:有4種:等深分箱法、等寬分箱法、最小熵法和用戶自定義區間法。
等深分箱法(統一權重):將數據集按記錄行數分箱,每箱具有相同的記錄數,每箱記錄數稱為箱子的深度。這是最簡單的一種分箱方法。
設定權重(箱子深度)為4,分箱後
箱1:800 1000 1200 1500
箱2:1500 1800 2000 2300
箱3:2500 2800 3000 3500
箱4:4000 4500 4800 5000
等寬分箱法(統一區間):使數據集在整個屬性值的區間上平均分布,即每個箱的區間范圍是一個常量,稱為箱子寬度。
設定區間范圍(箱子寬度)為1000元人民幣,分箱後
箱1:800 1000 1200 1500 1500 1800
箱2:2000 2300 2500 2800 3000
箱3:3500 4000 4500
箱4:4800 5000
用戶自定義區間:用戶可以根據需要自定義區間,當用戶明確希望觀察某些區間范圍內的數據分布時,使用這種方法可以方便地幫助用戶達到目的。
如將客戶收入劃分為1000元以下、1000~2000、2000~3000、3000~4000和4000元以上幾組,分箱後
箱1:800
箱2:1000 1200 1500 1500 1800 2000
箱3:2300 2500 2800 3000
箱4:3500 4000
箱5:4500 4800 5000
2.2.2 數據平滑方法
按平均值平滑 :對同一箱值中的數據求平均值,用平均值替代該箱子中的所有數據。 按邊界值平滑:用距離較小的邊界值替代箱中每一數據。 按中值平滑:取箱子的中值,用來替代箱子中的所有數據。
三、數據集成
數據集成中的兩個主要問題是:
(1)如何對多個數據集進行匹配,當一個資料庫的屬性與另一個資料庫的屬性匹配時,必須注意數據的結構; (2)數據冗餘。兩個數據集有兩個命名不同但實際數據相同的屬性,那麼其中一個屬性就是冗餘的。
四、數據變換
數據變換策略主要包括以下幾種:
光滑:去掉雜訊; 屬性構造:由給定的屬性構造出新屬性並添加到數據集中。例如,通過「銷售額」和「成本」構造出「利潤」,只需要對相應屬性數據進行簡單變換即可 聚集:對數據進行匯總。比如通過日銷售數據,計算月和年的銷售數據; 規范化:把數據單按比例縮放,比如數據標准化處理; 離散化:將定量數據向定性數據轉化。比如一系列連續數據,可用標簽進行替換(0,1);
五、數據歸約
數據歸約通常用維歸約、數值歸約方法實現。維歸約指通過減少屬性的方式壓縮數據量,通過移除不相關的屬性,可以提高模型效率。常見的維歸約方法有:分類樹、隨機森林通過對分類效果的影響大小篩選屬性;小波變換、主成分分析通過把原數據變換或投影到較小的空間來降低維數。

『陸』 神經網路異常檢測方法和機器學習異常檢測方法對於入侵檢測的應用

神經網路異常檢測方法

神經網路入侵檢測方法是通過訓練神經網路連續的信息單元來進行異常檢測,信息單元指的是命令。網路的輸入為用戶當前輸入的命令和已執行過的W個命令;用戶執行過的命令被神經網路用來預測用戶輸入的下一個命令,如下圖。若神經網路被訓練成預測用戶輸入命令的序列集合,則神經網路就構成用戶的輪郭框架。當用這個神經網路預測不出某用戶正確的後繼命令,即在某種程度上表明了用戶行為與其輪廓框架的偏離,這時表明有異常事件發生,以此就能作異常入侵檢測。


上面式子用來分類識別,檢測異常序列。實驗結果表明這種方法檢測迅速,而且誤警率底。然而,此方法對於用戶動態行為變化以及單獨異常檢測還有待改善。復雜的相似度量和先驗知識加入到檢測中可能會提高系統的准確性,但需要做進一步工作。

『柒』 互不相關的幾組數據如何檢測每組數據的異常值

簡單統計。
異常檢測和處理是一個比較小的分支,或者說,是機器學習的一個副產物,因為在一般的預測問題中,模型通常是對整體樣本數據結構的一種表達方式,這種表達方式通常抓住的是整體樣本一般性的性質,而那些在這些性質上表現完全與整體樣本不一致的點,我們就稱其為異常點,通常異常點在預測問題中是不受開發者歡迎的,因為預測問題通產關注的是整體樣本的性質,而異常點的生成機制與整體樣本完全不一致。

『捌』 如何利用機器學習檢測加密惡意流量

惡意軟體是指在計算機系統上執行惡意任務的病毒、蠕蟲和特洛伊木馬的程序,通過破壞軟體進程來實施控制。騰訊移動安全實驗室發布的數據顯示,惡意軟體由多種威脅組成,會不斷彈出,所以需要採取多種方法和技術來進行反病毒保護。

『玖』 用機器學習檢測異常點擊流

用機器學習檢測異常點擊流
本文內容是我學習ML時做的一個練手項目,描述應用機器學習的一般步驟。該項目的目標是從點擊流數據中找出惡意用戶的請求。點擊流數據長下圖這樣子,包括請求時間、IP、平台等特徵:

該項目從開始做到階段性完成,大致可分為兩個階段:演算法選擇和工程優化。演算法選擇階段挑選合適的ML模型,嘗試了神經網路、高斯分布、Isolation Forest等三個模型。由於點擊流數據本身的特性,導致神經網路和高斯分布並不適用於該場景,最終選擇了Isolation Forest。工程優化階段,最初使用單機訓練模型和預測結果,但隨著數據量的增加,最初的單機系統出現了性能瓶頸;然後開始優化性能,嘗試了分布化訓練,最終通過單機非同步化達到了性能要求。
1 演算法選擇
1.1 神經網路
剛開始沒經驗,受TensorFlow熱潮影響,先嘗試了神經網路。選用的神經網路是MLP(Multilayer Perceptron,多層感知器),一種全連接的多層網路。MLP是有監督學習,需要帶標簽的樣本,這里「帶標簽」的意思是樣本數據標注了哪些用戶請求是惡意的、哪些是正常的。但後台並沒有現成帶標簽的惡意用戶樣本數據。後來通過安全側的一些數據「間接」給用戶請求打上了標簽,然後選擇IP、平台、版本號、操作碼等數據作為MLP的輸入數據。結果當然是失敗,想了下原因有兩個:
1, 樣本的標簽質量非常差,用這些樣本訓練出來的模型性能當然也很差;
2, 輸入的特徵不足以刻畫惡意用戶。
數據的質量問題目前很難解決,所以只能棄用MLP。
1.2 高斯分布
然後嘗試其他模型。通過搜索發現,有一類ML模型專門用於異常檢測,找到了Andrew Ng介紹的基於高斯分布的異常檢測演算法:高斯分布如下圖所示:

這個演算法的思想比較簡單:與大部分樣本不一致的樣本就是異常;通過概率密度量化「不一致」。具體做法是:選擇符合高斯分布或能轉換為高斯分布的特徵,利用收集到的數據對高斯分布做參數估計,把概率密度函數值小於某個閾值的點判定為異常。
所謂的參數估計是指,給定分布數據,求分布的參數。對高斯分布來說,就是求μ和σ。用極大似然估計可以得到高斯分布參數的解析解:

得到高斯分布參數後,用下式計算概率密度:

X表示一個特徵輸入。若有多個特徵x0、x1、…、xn,一種簡單的處理方法是將其結果連乘起來即可:f(x) = f(x0)f(x1)…f(xn)。
然後選定一個閾值ε,把f(x) < ε的樣本判定為異常。ε值需根據實際情況動態調整,默認可設定ε = f(μ- 3σ)。
把這個模型初步應用於點擊流異常檢測時,效果還不錯,但在進一步實施過程中碰到一個棘手問題:樣本中最重要的一個特徵是操作碼,當前操作碼在微信後台的取值范圍是[101,1000],每個操作碼的請求次數是模型的基礎輸入,對900個特徵計算概率密度再相乘,非常容易導致結果下溢出,以致無法計算出精度合適的概率密度值。這個現象被稱為維度災難(Dimension Disaster)。
解決維度災難的一個常見做法是降維,降維的手段有多種,這里不展開討論了。在點擊流分析的實踐中,降維的效果並不好,主要原因有兩個:
1, 正常用戶和惡意用戶的訪問模式並不固定,導致很難分解出有效的特徵矩陣或特徵向量;
2, 降維的本質是有損壓縮,有損壓縮必定導致信息丟失。但在本例中每一維的信息都是關鍵信息,有損壓縮會極大破壞樣本的有效性。
高斯分布模型的維度災難在本例中較難解決,只能再嘗試其他模型了
1.3 Isolation Forest
Isolation Forest,可翻譯為孤異森林,該演算法的基本思想是:隨機選擇樣本的一個特徵,再隨機選擇該特徵取值范圍中的一個值,對樣本集做拆分,迭代該過程,生成一顆Isolation Tree;樹上葉子節點離根節點越近,其異常值越高。迭代生成多顆Isolation Tree,生成Isolation Forest,預測時,融合多顆樹的結果形成最終預測結果。Isolation Forest的基礎結構有點類似經典的隨機森林(Random Forest)。
這個異常檢測模型有效利用了異常樣本「量少」和「與正常樣本表現不一樣」的兩個特點,不依賴概率密度因此不會導致高維輸入的下溢出問題。提取少量點擊流樣本測試,它在900維輸入的情況下也表現良好,最終選擇它作為系統的模型。
2 工程優化
工程實現經歷了單機訓練、分布式訓練、單機非同步化訓練3個方案,下面內容介紹實現過程中碰到的問題和解決方法。
2.1 單機訓練
整個系統主要包括收集數據、訓練模型、預測異常、上報結果四個部分。
2.1.1 收集數據
剛開始嘗試該模型時,是通過手工方式從mmstreamstorage獲取樣本的:
1,通過logid 11357,得到手工登錄成功用戶的uin和登錄時間;
2,利用mmstreamstorage提供的介面,得到用戶登錄後10分鍾的點擊流;
但這樣做有兩個缺點:
1,上述步驟1是離線手工操作的,需要做成自動化;
2,mmstreamstorage的介面性能較差,只能提供2萬/min的查詢性能,上海IDC登錄的峰值有9萬/min。
改進辦法是復用點擊流上報模塊mmstreamstorage,增加一個旁路數據的邏輯:
1,手工登錄時在presence中記錄手工登錄時間,mmstreamstorage基於該時間旁路一份數據給mmguardstore。由於mmstreamstorage每次只能提供單挑點擊流數據,所以需要在mmguardstore中緩存;
2,mmguardstore做完數據清洗和特徵提取,然後把樣本數據落地,最後利用crontab定期將該數據同步到Hadoop集群中。
最終的數據收集模塊結構圖如下所示:

點擊流數據提供了IP、平台、版本號、操作碼等特徵,經過多次試驗,選定用戶手工登錄後一段時間內操作碼的訪問次數作為模型的輸入。
上面我們提到過點擊流的操作碼有900個有效取值,所以一個顯然的處理方法是,在mmguardstore中把用戶的點擊流數據轉化為一個900維的向量,key是cgi id,value是對應cgi的訪問次數。該向量刻畫了用戶的行為,可稱為行為特徵向量。
2.1.2 訓練模型
初起為了控制不確定性,只輸入1萬/分鍾的樣本給模型訓練和預測。系統的工作流程是先從Hadoop載入上一分鍾的樣本數據,然後用數據訓練Isolation Forest模型,最後用訓練好的模型做異常檢測,並將檢測結果同步到tdw。
在1萬/分鍾輸入下取得較好的檢測結果後,開始導入全量數據,全量數據數據的峰值為20萬/分鍾左右。出現的第一個問題是,一分鍾內無法完成載入數據、訓練模型、預測結果,單載入數據就耗時10分鍾左右。這里先解釋下為什麼有「一分鍾」的時間周期限制,主要原因有兩個:
1, 想盡快獲取檢測結果;
2, 由於點擊流異常檢測場景的特殊性,模型性能有時效性,需要經常用最新數據訓練新的模型。
解決性能問題的第一步是要知道性能瓶頸在哪裡,抽樣發現主要是載入數據和訓練模型耗時較多,預測異常和上報結果的耗時並沒有隨數據量的增加而快速上漲。
載入數據的耗時主要消耗在網路通信上:樣本文件太大了,導致系統從Hadoop同步樣本數據時碰到網路帶寬瓶頸。但由於樣本是文本類數據,對數據先壓縮再傳輸可極大減少通信量,這里的耗時比較容易優化。
訓練模型的耗時增加源於輸入數據量的增加。下圖是1萬樣本/min的輸入下,系統個階段的耗時:

其中:
載入程序: 2s
載入數據: 6s
訓練模型:11s
分類異常: 2s
保存結果: 4s
單輪總耗時:25s
需處理全量數據時,按線性關系換算,「訓練模型」耗時為:11s * 24 = 264s,約為4.4分鍾,單機下無法在1分鍾內完成計算。
最先想到的優化訓練模型耗時的辦法是分布式訓練。
2.2 分布式訓練
由於scikit-learn只提供單機版的Isolation Forest實現,所以只能自己實現它的分布式版本。了解了下目前最常用的分布式訓練方法是參數伺服器(Parameter Server,PS)模式,其想法比較簡單:訓練模型並行跑在多機上,訓練結果在PS合並。示意圖如下所示:

分布式訓練對演算法有一定要求,而Isolation Forest正好適用於分布式訓練。
然後嘗試在TensorFlow上實現Isolation Forest的分布式訓練版本。選擇TensorFlow的原因有主要兩個:
1, TensorFlow已經實現了一個分布式訓練框架;
2, TensorFlow的tf.contrib.learn包已經實現的Random Forest可作參考(Isolation Forest在結構上與Random Forest類似),只需對Isolation Forest定製一個Operation即可。
寫完代碼測試時,發現了個巨坑的問題:TenforFlow內部的序列化操作非常頻繁、性能十分差。構造了110個測試樣本,scikit-learn耗時只有0.340秒,29萬次函數調用;而TensorFlow耗時達207.831秒,有2.48億次函數調用。
TensorFlow性能抽樣:

Scikit-learn性能抽樣:

從TensorFlow的性能抽樣數據可以看到,耗時排前排的函數都不是實現Isolation Forest演算法的函數,其原因應該與TensorFlow基於Graph、Session的實現方式有關。感覺這里坑比較深,遂放棄填坑。
也了解了下基於Spark的spark-sklearn,該項目暫時還未支持Isolation Forest,也因為坑太深,一時半會搞不定而放棄了。
2.3 單機非同步化訓練
沒搞定分布式訓練,只能回到單機場景再想辦法。單機優化有兩個著力點:優化演算法實現和優化系統結構。
首先看了下scikit-learn中Isoaltion Forest的實現,底層專門用Cython優化了,再加上Joblib庫的多CPU並行,演算法實現上的優化空間已經很小了,只能從系統結構上想辦法。
系統結構上的優化有兩個利器:並行化和非同步化。之前的單機模型,載入數據、訓練模型、預測異常、上報結果在單進程中串列執行,由此想到的辦法是啟動4個工作進程分別處理相應的四個任務:非同步訓練模型、預測異常和上報結果,並行載入數據。工作進程之間用隊列通信,隊列的一個優勢是容易實現流量控制。
寫完代碼測試,卻發現YARD環境中的Python HDFS庫在多進程並發下直接拋異常。嘗試多個方法發現這個問題較難解決,暫時只能想辦法規避。經測試發現,直接從Hadoop同步所有壓縮過的樣本數據只需2秒左右,由此想到規避方法是:先單進程同步所有樣本數據,再多進程並發解壓、載入和預測。
按上述想法修改代碼測試,效果較好,處理所有樣本只需20秒左右,達到了1分鍾處理完所有樣本的要求。然後提交YARD作業線上跑,處理所有樣本耗時卻達到200~400秒:

咨詢YARD側同學,得知YARD對提交的離線作業有CPU配額的硬限制,分時段配額如下表:
00:00~09:00 80%
09:00~19:00 50%
19:00~23:00 15%
23:00~24:00 50%
晚高峰時段的配額只有15%。
與YARD側同學溝通,他們答應後續會支持scikit-learn庫的在線服務。目前通過手工方式在一台有scikit-learn的mmguardstore機器上運行在線服務,晚高峰時段處理全量數據耗時為20秒左右。
最終的系統結構圖如下圖所示:

模型訓練進程定期訓練最新的模型,並把模型通過隊列傳給預測進程。預測進程每分鍾運行一次,檢查模型隊列上是否有新模型可使用,然後載入數據、檢測異常,將檢測結果通過上報隊列傳給上報進程。上報進程block在上報隊列上,一旦發現有新數據,就根據數據類型執行上報監控、上報tdw等操作。
2.4 評估性能
安全側將異常用戶分為以下幾類:盜號、LBS/加好友、養號、欺詐、外掛/多開等。由於這些分類的異常打擊是由不同同學負責,不便於對Isolation Forest的分類結果做評估,因此需要在Isolation Forest的基礎上,再加一個分類器,標記「異常樣本」的小類。利用操作碼實現了該分類器。
接入全量數據後,每天准實時分析1億量級的樣本,檢測出500萬左右的異常,精確分類出15萬左右的惡意請求。惡意請求的uin、類型、發生時間通過tdw中轉給安全側。安全側通過線下人工分析和線上打擊,從結果看檢測效果較好。
2.5 持續優化
再回過頭觀察點擊流數據,我們使用的Isolation Forest模型只利用了操作碼的統計數據。可以明顯看到,點擊流是一個具備時間序列信息的時序數據。而自然語言處理(Natural LanguageProcessing,NLP)領域已經積累了非常多的處理時序數據的理論和實戰經驗,如LSTM、word2vec等模型。後續期望能引入NLP的相關工具挖掘出更多惡意用戶。

『拾』 如何用matlab檢測機器學習訓練結果

sim函數可以檢驗神經網路,詳見:
http://cn.mathworks.com/help/nnet/ref/sim.html?searchHighlight=sim