訂閱
糾錯
加入自媒體

使用Python進行異常檢測的解決方案

計算每個特征的平均值。這里我們只有兩個特征:0和1。s = np.sum(df, axis=0)

mu = s/m

mu

輸出:0    14.112226

1    14.997711

dtype: float64

根據(jù)上面“公式和過程”部分中描述的公式,讓我們計算方差:vr = np.sum((df - mu)**2, axis=0)

variance = vr/m

variance

輸出:0    1.832631

1    1.709745

dtype: float64

現(xiàn)在把它做成對角線形狀。正如我在概率公式后面的“公式和過程”一節(jié)中所解釋的,求和符號實際上是方差var_dia = np.diag(variance)

var_dia

輸出:array([[1.83263141, 0.        ],

      [0.        , 1.70974533]])

計算概率:k = len(mu)

X = df - mu

p = 1/((2*np.pi)**(k/2)*(np.linalg.det(var_dia)**0.5))* np.exp(-0.5* np.sum(X @ np.linalg.pinv(var_dia) * X,axis=1))
p

使用Python進行異常檢測的解決方案

訓練部分已經(jīng)完成。下一步是找出閾值概率。如果概率低于閾值概率,則樣本數(shù)據(jù)為異常數(shù)據(jù),但我們需要為我們的特殊情況找出那個閾值。對于這一步,我們使用交叉驗證數(shù)據(jù)和標簽。對于你的案例,你只需保留一部分原始數(shù)據(jù)以進行交叉驗證。現(xiàn)在導入交叉驗證數(shù)據(jù)和標簽:cvx = pd.read_excel('ex8data1.xlsx', sheet_name='Xval', header=None)

cvx.head()

使用Python進行異常檢測的解決方案

標簽如下:cvy = pd.read_excel('ex8data1.xlsx', sheet_name='y', header=None)

cvy.head()

使用Python進行異常檢測的解決方案

把'cvy'轉(zhuǎn)換成NumPy數(shù)組。y = np.a(chǎn)rray(cvy)

輸出:# 數(shù)組的一部分

array([[0],
      [0],
      [0],
      [0],
      [0],
      [0],
      [0],
      [0],
      [0],

這里,y值為0表示這是一個正常的樣本,y值為1表示這是一個異常的樣本。選擇閾值首先讓我們再檢查一下概率值。p.describe()

輸出:count    3.070000e+02

mean     5.905331e-02

std      2.324461e-02

min      1.181209e-23

25%      4.361075e-02

50%      6.510144e-02

75%      7.849532e-02

max      8.986095e-02

dtype: float64

<上一頁  1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

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

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