第一章 Clustering(聚類)--使用K-Means和DBSCAN 算法

        聚類分析的目的是基於其關鍵特徵或屬性之間的相似性將數據分離爲一組離散的組或聚類。 在給定羣集內,數據項彼此之間的相似程度將高於不同羣集中的數據項。 可以使用各種統計,人工智能和機器學習技術來創建這些集羣,應用的具體算法由數據的性質和分析師的目標決定。

      雖然聚類分析大約在八十五年前首次出現在社會科學中,但它已被證明是一種強大且廣泛適用的探索數據和提取有意義見解的方法。 例如,各種零售企業通過分析存儲在大量數據倉庫中的TB級交易記錄,使用集羣分析將其客戶劃分爲具有相似購買習慣的組。零售商可以使用最終的客戶細分模型進行個性化的追加銷售和交叉銷售,這些服務具有更高的被接受可能性。 聚類還經常與其他分析技術結合使用,如模式識別,分析研究數據,分類文檔,以及Cylance-in在檢測和阻止惡意軟件執行之前。

      在網絡安全域中,聚類分析通常通過一系列明確定義的數據準備和分析操作進行。 在本章的最後,您將找到Cylance網站的鏈接,其中包含您自己逐步完成相同步驟的數據和說明。

Step 1: Data Selection and Sampling (數據選擇和採樣)

       在我們開始使用任何機器學習方法之前,我們需要從一些數據開始。 理想情況下,我們可能希望對所有網絡操作和系統數據進行分析,以確保我們的結果準確反映我們的網絡和計算環境。 然而,由於數據量龐大以及收集和整合分佈在異構系統和數據源中的數據的困難,這通常既不可行也不實用。 因此,我們通常應用統計抽樣技術,使我們能夠爲分析創建更易於管理的數據子集。 樣本應儘可能地反映總數據集的特徵,否則可能會影響我們結果的準確性。 例如,如果我們決定分析十臺不同計算機的Internet活動,我們的示例應包括來自所有十個系統的代表性日誌條目。

Step 2: Feature Extraction(特徵提取)

       在這個階段,我們決定應該提取樣本中的哪些數據元素並進行分析。 在機器學習中,我們將這些數據元素稱爲“特徵”,即可以分析以產生有用見解的數據的屬性或屬性。

       例如,在面部識別分析中,相關特徵可能包括眼睛,鼻子和嘴巴的形狀,大小和配置。 在安全域中,相關功能可能包括打開,關閉或篩選的端口百分比,在每個端口上運行的應用程序以及應用程序版本號。 如果我們正在調查數據泄露的可能性,我們可能希望包含帶寬利用率和登錄時間的功能。

       通常,我們有數千種功能可供選擇。 但是,我們添加的每個功能都會增加處理器的負擔以及完成分析所需的時間。因此,根據我們之前的經驗解釋,排除那些我們知道不相關的功能,這是一種很好的做法。 此類數據和我們整體的專業知識。 統計測量也可用於自動刪除無用或不重要的功能。

Step 3: Feature Encoding and Vectorization (特徵編碼和矢量化)

       大多數機器學習算法要求以某種數學方式對數據進行編碼或表示。 可以編碼數據的一種非常常見的方式是將每個樣本及其特徵集映射到行和列的網格。 一旦以這種方式構造,每個樣本被稱爲“向量”。整個行和列集合被稱爲“矩陣”。我們使用的編碼過程取決於表示每個特徵的數據是否是連續的,分類的 ,或其他一些類型。

       連續的數據可以佔據一系列值中的無數個值中的任何一個。 例如,CPU利用率可以在0到100%之間。 因此,我們可以將一小時內服務器的平均CPU使用率表示爲一組簡單向量,如下所示。

       與連續數據不同,分類數據通常由更有限範圍內的一小組允許值表示。 軟件名稱和版本號是兩個很好的例子。 分類數據在定義組時具有固有的用途。 例如,我們可以使用分類功能(如操作系統和版本號)來標識具有相似特徵的一組系統。

        像這樣的類別必須編碼爲數字才能進行數學分析。 一種方法是在每個向量中創建一個空間,以容納映射到類別的每個允許數據值以及每個空間內的標誌,以指示該值是否存在。 例如,如果我們有三臺服務器運行三個不同版本的Linux之一,我們可能會按如下方式對操作系統功能進行編碼:

      我們可以看到,Host A運行Ubuntu,而Hosts B和C分別運行Red Hat和SUSE版本的Linux。

      或者,我們可以爲每個操作系統分配一個值並相應地向量化我們的主機:

       但是,我們必須小心避免可能導致機器學習操作的任意映射(例如聚類算法)錯誤地推斷出實際上不存在這些值的含義。 例如,使用上面的映射,算法可能會知道Ubuntu“小於”Red Hat,因爲1小於2或者如果值被反轉則達到相反的結論。 在實踐中,分析師使用一種更復雜的編碼方法,通常稱爲“一熱編碼”。

        在許多情況下,連續和分類數據組合使用。 例如,我們可能會包含一組連續功能(例如,打開,關閉和過濾端口的百分比)以及一組分類功能(例如,操作系統和每個端口上運行的服務)以識別 具有相似風險概況的節點組。 在這些情況下,通常需要通過“標準化”過程來壓縮連續矢量中的值範圍,以確保每個矢量中的特徵具有相同的權重。 例如,k均值算法使用從中心點到組矢量的相似性的平均距離。 如果沒有歸一化,k-means可能會超過分類數據的影響並相應地扭曲結果。

        讓我們考慮以下示例:

       此處,“每秒請求數”功能的值的範圍是CPU利用率%功能的十倍。 如果這些值未被標準化,則距離計算可能會傾向於過分強調該範圍差異的影響。

        例如,在下面的圖表中,我們可以看到服務器Alpha和服務器Bravo之間相對於每秒請求數之間的差異是40,而服務器之間相對於CPU利用率%的差異僅爲2.在這種情況下,請求 每秒佔服務器之間差異的95%,這種差異可能會嚴重扭曲隨後的距離計算。

       我們將通過使用以下公式將兩個特徵歸一化到0-1範圍來解決這種偏斜問題:x-xmin / xmax-xmin。

     規範化後,服務器Alpha和Bravo之間的每秒請求數之差爲.33,而CPU利用率%的差異已降至17.每秒請求數僅佔差異的66%。

Step 4: Computation and Graphing(計算和繪圖)

        完成將要素轉換爲向量後,我們就可以將結果導入合適的統計分析或數據挖掘應用程序,例如IBM SPSS Modeler和SAS Data Mining Solution。 或者,我們可以利用可用的數百個軟件庫中的一個來執行此類分析。 在下面的示例中,我們將使用scikit-learn,一個免費的開源數據挖掘庫和用Python編程語言構建的統計函數。
        加載數據後,我們可以選擇首先應用哪種聚類算法。 例如,在scikit-learn中,我們的選項包括k-means,Affinity Propagation,Mean-Shift,Spectral Clustering,Ward Hierarchical Clustering,Agglomerative Clustering,DBSCAN,Gaussian Mixtures和Birch。 讓我們考慮兩種最流行的聚類算法,k-means和DBSCAN。

Clustering with K-Means(用K-Means聚類)

FIGURE 1.1: Vectors in Feature Space

FIGURE 1.2: K-Means Clustering Process

K-MEANS PITFALLS AND LIMITATIONS

Clustering with DBSCAN

FIGURE 1.3: DBSCAN Clustering Process

FIGURE 1.4: Euclidean, Manhattan, and Cosine Distances

FIGURE 1.5: DBSCAN Cluster Density Pitfall

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章