Classification and Predication

classification and predication

主要兩步驟
1model construction(建模):
根據己知結果(training data)產生規則,
速度較沒影響
2using the model in prediction(使用模型):
根據該規則預測unseen data(未知資料)的結果
速度很重要,因為要即時根據模型得到結果

常見演算法 
decision tree(決策樹):解讀容易
bayesian classfication(貝式分類法):簡單,正確率不高
back propaqation:正確率高,但難解讀結果
SVM(support vector machines):正確率最高,但只能處理YES或NO的結果

常見技巧
Ensemble Learning:根據多個分類演算法的結果進行表決,最後將表決結果整合成最後的決策 

常見錯誤:
Underfitting(訓練不足) : 模型太簡單,無法描述整個複雜資料,導致分類品質不佳
Overfitting(過度學習): 模型太貼近train data,導致分類品質不佳

ps:
Regularization:用來解決overfitting的一種方法 

驗證分類品質的指標

P(Postive)和N(Negotive)代表系統認為的結果
T(True)和F(False)代表系統認為的結果是否正確 

結合上述共有以下四種狀態 
TP=系統認為結果是P, 答對 (抓對幾個)
FP=系統認為結果是P, 但結果是錯的 (抓錯幾個/誤判/假警報)
TN=系統認為結果是N, 答對
FN=系統認為結果是N, 但結果是錯的 (漏抓數量)

並有以下幾種公式
P=TP+FN =實際資料是P的數量
N=FP+TN =實際資料是N的數量 
accuracy=(TP+TN)/(P+N) = 系統認為P和N的答對機率有幾%
precision= TP/(TP+FP) =系統認為結果為P,有幾%正確
recall = TP/P = TP佔整個實際數量的機率%(整體來說,系統抓到幾%病毒)
F1-measure=2*TP/(2*TP+FP+FN)=混合precision和recall 
TPR(命中率)=recall
FPR(錯誤命中率)=FP/N
ROC=各種TPR和FPR結果所產生的一條曲線
AUC=ROC下的面積,數字介於1~0之間,越大表示系統認定結果越好,0.5表示無預測價值

一個網路內有30設備被入侵,70台設備沒被入侵
假設有某一機制認為40台設備被入侵,但只有20台真的被入侵
TP=20 (抓對幾個)
FP=20 (抓錯幾個)
TN=50
FN=10 (漏抓數量)
accuracy=(20+50)/100=70%
precision=20/(20+20)=50%
recall=20/(20+10)=66%
F1=(2*20)/(2*20+20+10)=57%

一家公司有20台設備中毒,80台設備沒中毒
假設有一系統在之前就預測到有5台設備中毒,其中5台真的中毒
TP=5
FP=0
TN=80
FN=15
accuracy=(5+80)/100=85%
precision=5/(5+0)=100%
recall=5/(5+15)=25%
F1=(5*2)/(5*2+0+15)=40%

驗證數值預測品質的指標
MAD(mean absolute deviation,平均絕對偏差)
MSE(mean squared error,均方誤差)
MAPE(mean absolute percent error,平均絕對百分比誤差) 

##################################################################

bayesian classfication(貝式分類法)

1
計算P(Ci)

P(Ci)表示在資料集中出現的機率
2
計算P( X | Ci )=directproduct( k , P(Xk|Ci) )

P(Xk|Ci):表示在Ci發生的情況下Xk的機率
算出來的機率不可為0,否則會將P( X | Ci )的值變為0
3
找最大值
P(Ci | X) = P( X | Ci)*P(Ci)
MAX( P(Ci | X) )

ps:
avoid 0的其中一個方法
P(Xk|Ci) => P(Xk+e|Ci+distinct(X)*e)
distinct(X)=該X類別有幾種不同的資料
e=自訂的小數,ex:0.1或0.01

……………………………………………… 

ex:

rid flow packet student over1gb class:is infected? 
 1 lowhighnono no 
 2 lowhighno yes no 
 3 mediumhigh no no yes 
 4 highmedium no no yes 
 5 highlow yes no yes 
 6 highlow yes yes no 
 7 mediumlow yes yes yes 
 8 lowmedium no no no 
 9 lowlow yes no yes 
 10 highmedium yes no yes 
 11 lowmedium yes yes yes 
 12 mediummedium no yes yes 
 13 mediumhigh yes no yes 
 14 highmedium no yes no 

ps:over1gb表示流量超過1gb

1
計算P(Ci)

P(C1)=P(infected=yes),機率=9/14=0.643
P(C2)=P(infected=no),機率=5/14=0.357
2
計算P( X | Ci)
假設X=(flow=low, packet=medium , student=yes , over1gb=no)
P( X1 | C1) = P( flow=low | infected=yes )=2/9=0.222
P( X2 | C1) = P( packet=medium | infected=yes )=4/9=0.444
P( X3 | C1) = P( student=yes | infected=yes )=6/9=0.667
P( X4 | C1) = P( over1gb=no | infected=yes )=6/9=0.667
P( X | C1)=P(X1|C1)*P(X2|C1)*P(X3|C1)*P(X4|C1)
= P(X | infected=yes)=0.222*0.444*0.667*0.667=0.044
P( X1 | C2) = P( flow=low | infected=no )=3/5=0.6
P( X2 | C2) = P( packet=medium | infected=no )=2/5=0.4
P( X3 | C2) = P( student=yes | infected=no )=1/5=0.2
P( X4 | C2) = P( over1gb=no | infected=no )=2/5=0.4
P( X | C2)=P(X1|C2)*P(X2|C2)*P(X3|C2)*P(X4|C2)
=P(X | infected=no)=0.6*0.4*0.2*0.4=0.019
3
找最大值

P(C1| X) = P( X | C1)*P(C1)=0.044*0.643=0.028
P(C2| X) = P( X | C2)*P(C2)=0.019*0.357=0.007
因MAX( P(Ci| X) )=P(C1| X) ,所以X屬於C1
=(flow=low, packet=medium , student=yes , over1gb=no)屬於(infected=yes)
換句話說
當flow為low,而且packet為medium,而且身份為student,而且流量未超過1gb時
則該PC已被感染


ps:
避免0的改變
假設e=0.1,X=(flow=low, packet=medium , student=yes , over1gb=no)
計算 P(X | infected=yes)
P( X1 | C1) = P( flow=low | infected=yes )=2/9=>2.1/9.3=0.228
P( X2 | C1) = P( packet=medium | infected=yes )=4/9=>4.1/9.3=0.440
P( X3 | C1) = P( student=yes | infected=yes )=6/9=>6.1/9.2=0.663
P( X4 | C1) = P( over1gb=no | infected=yes )=6/9=>6.1/9.2=0.663
P( X | C1)=P(X1|C1)*P(X2|C1)*P(X3|C1)*P(X4|C1)
= P(X | infected=yes)=0.228*0.44*0.663*0.663=0.044