訂閱
糾錯(cuò)
加入自媒體

使用Python進(jìn)行異常檢測(cè)的解決方案

如圖所示,我們沒(méi)有太多異常數(shù)據(jù),所以,如果我們從75%的值開(kāi)始,會(huì)是比較好的結(jié)果,但為了安全起見(jiàn),我會(huì)從平均值開(kāi)始。所以我們將從平均值和更低的概率范圍開(kāi)始檢查這個(gè)范圍內(nèi)每個(gè)概率的f1分?jǐn)?shù)。首先,定義一個(gè)函數(shù)來(lái)計(jì)算真正例、假正例和假反例:def tpfpfn(ep):

   tp, fp, fn = 0, 0, 0
   for i in range(len(y)):
       if p[i] <= ep and y[i][0] == 1:
           tp += 1
       elif p[i] <= ep and y[i][0] == 0:
           fp += 1
       elif p[i] > ep and y[i][0] == 1:
           fn += 1
   return tp, fp, fn

列出低于或等于平均概率的概率。eps = [i for i in p if i <= p.mean()]

檢查一下列表的長(zhǎng)度len(eps)

輸出:133

根據(jù)前面討論的公式定義一個(gè)計(jì)算f1分?jǐn)?shù)的函數(shù):def f1(ep):
   tp, fp, fn = tpfpfn(ep)
   prec = tp/(tp + fp)
   rec = tp/(tp + fn)
   f1 = 2*prec*rec/(prec + rec)
   return f1

所有函數(shù)都準(zhǔn)備好了!現(xiàn)在計(jì)算所有epsilon和我們之前選擇的概率值范圍的f1分?jǐn)?shù)。f = []
for i in eps:
   f.a(chǎn)ppend(f1(i))
f
輸出:[0.14285714285714285,
0.14035087719298248,
0.1927710843373494,
0.1568627450980392,
0.208955223880597,
0.41379310344827586,
0.15517241379310345,
0.28571428571428575,
0.19444444444444445,
0.5217391304347826,
0.19718309859154928,
0.19753086419753085,
0.29268292682926833,
0.14545454545454545,

這是f分?jǐn)?shù)表的一部分,它的長(zhǎng)度是133。f分?jǐn)?shù)通常在0到1之間,其中f1得分越高越好,所以,我們需要從剛才計(jì)算的f分?jǐn)?shù)列表中取f的最高分?jǐn)?shù)。現(xiàn)在,使用“argmax”函數(shù)來(lái)確定f分?jǐn)?shù)值最大值的索引。np.a(chǎn)rray(f).a(chǎn)rgmax()
輸出:131

現(xiàn)在用這個(gè)索引來(lái)得到閾值概率。e = eps[131]

e

輸出:6.107184445968581e-05

找出異常實(shí)例現(xiàn)在我們有了臨界概率,可以從中找出我們訓(xùn)練數(shù)據(jù)的標(biāo)簽了。如果概率值小于或等于該閾值,則數(shù)據(jù)為異常數(shù)據(jù),否則為正常數(shù)據(jù)。我們將正常數(shù)據(jù)和異常數(shù)據(jù)分別表示為0和1,label = []
for i in range(len(df)):
   if p[i] <= e:
       label.a(chǎn)ppend(1)
   else:
       label.a(chǎn)ppend(0)
label
輸出:[0,
0,
0,
0,
0,
0,
0,
0,
0,
0,

這是標(biāo)簽列表的一部分。我將在上面的訓(xùn)練數(shù)據(jù)集中添加此標(biāo)簽:df['label'] = np.a(chǎn)rray(label)

df.head()

使用Python進(jìn)行異常檢測(cè)的解決方案

我在標(biāo)簽為1的地方用紅色繪制數(shù)據(jù),在標(biāo)簽為0的地方用黑色繪制,得到以下結(jié)果。

使用Python進(jìn)行異常檢測(cè)的解決方案

我們可以看到紅色的數(shù)據(jù)明顯是異常值。結(jié)論本文我們一步一步地解釋了開(kāi)發(fā)異常檢測(cè)算法的整個(gè)過(guò)程,如果你通過(guò)閱讀本文無(wú)法理解算法的過(guò)程,建議你運(yùn)行每一段代碼來(lái)加強(qiáng)理解。

image.png

<上一頁(yè)  1  2  3  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

    掃碼關(guān)注公眾號(hào)
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號(hào)