天天看點

Splunk Machine Learning Toolkit在分類問題上的應用(一)

如果預測值是離散的,比如“好”“壞”,這類問題稱為分類;對隻涉及兩個類别的二分類問題,通常稱一個類為正類,另一個類為負類。我們看一下有關算法和概念。

真實類别和預測類别的關系

在二分類問題中,真實類别和預測類别有四種關系,真正類(true positive, tp)、假正類(false positive, fp)、真負類(false negative, fn)、假負類(true negative, tn),很明顯,樣本總數=tp+fp+fn+tn。

真實類别

預測類别

正類

負類

tp

fn

fp

tn

tp:true positive,被預測為正類,事實上也是正類,可以稱為真的正确率;

fn:false negative,被預測為負類,事實上是正類,可以稱為假的正确率;

fp:false positive,被預測為正類,事實上是負類,可以稱為誤報率;

tn:false negative,被預測為負類,事實上也是負類,可以稱為漏報率;

評價模型的準确性 

準确率(accuracy),表示正确分類的樣本數與總樣本數之比。

查準率(precision),表示真正類個數與預測為正類的總數之比。

查全率(recall),表示真正類個數與實際為正類的總數之比。

F1度量(F1-Measure),表示查全率和查準率的調和均值。

一般情況:

其中當β>0時度量了查全率和查準率的相對重要性。β=1為F1形式,β>1時查全率有更大影響,β<1時查準率有更大影響。

LogisticRegression分類算法

線上性回歸中,我們使用線性函數 來預測y(i),顯然它不能很好預測分類問題,比如輸出标記y(i)∈{0,1}。我們引入logistic函數來處理二分類問題:

函數稱為logistic或者sigmoid函數,函數是S型曲線:

σ(z)∈ [0,1],它能處理二分類問題,比如有“1”“0”兩類,當x屬于 “1” 類時,調整參數θ使P(y=1|x)=hθ(x)盡可能大;相反使P(y=0|x)盡可能大。

成本函數(cost function)是評價模型拟合訓練集好壞的方法。在二分類中,對于x(i)的預測值y(i),i=1,...,m,我們有成本函數:

J(θ)值越小,代表拟合的越好。

為了找到拟合最好的模型,我們把問題轉化為求最小的J(θ)。參數不同導緻函數hθ(x)有很多,哪個函數才能使J(θ)最小?梯度下降(Gradient Descent)可以找到函數J(θ)的最小值。

梯度下降是一種優化算法,它是在目标函數的超平面上,沿着斜率下降的方向前進,直到遇到了超平面構成的“谷底”,這個谷底就是極小值點,同時也是局部最優點。對于J(θ)的梯度∇θJ(θ)為:

LogisticRegression算法先介紹到這裡,如果你還沒明白它的原理,也沒關系,我們看一下它在Splunk MLTK中,怎樣利用防火牆流量日志判定使用者惡意行為。

首先,firewall_traffic.csv是一份帶有标簽(特征)的防火牆流量日志,used_by_malware字段标記了日志是否有惡意行為。我們的目标是通過學習這些日志,判斷新來流量是否有惡意行為。

很明顯,這是二分類問題,我們可以使用LogisticRegression算法來拟合我們的模型。

對于這個界面相信大家都不陌生,首先我們搜尋我們的資料,再選擇LogisticRegression算法,標明預測字段(used_by_malware),選擇特征字段等,最後拟合模型。

同時,如果你不太熟悉Splunk ML-SPL的話,可以點選“Show SPL”按鈕查來看。

拟合後,我們在表格中看到模型準确性名額。

Splunk MLTK提供了建立告警接口,可以快速建立一個告警。

對于機器學習的算法和workflow,Splunk MLTK已經幫你實作,你甚至不需要知道這些算法的原理,隻需要根據Splunk MLTK提供的workflow,就可以訓練出自己的模型,它是真正把機器學習算法應用到真實資料的工具。

如果你想了解更多有關機器學習的資訊,或者在使用Splunk MLTK中有任何疑問,都可以到論壇(http://ask.10data.com)進行留言和讨論。