Machine Learning-用自動編碼器來實作異常值偵測-使用python keras 執行模型(outlier detection with autoencoder using python keras run model)

當訓練好模型後,想要找到與訓練異常的資料,只要將資料餵進模型中,再將MSE依降序排列,並設定門檻值。
門檻值可以取top N或 訓練集MSE最大值等等方法,端看應用情境。
下面python keras程式碼一樣簡單示意。

 
import numpy as np

from keras.models import Sequential

from keras.layers import Dense

import matplotlib.pyplot as plt

import mysql.connector

import pandas as pd

from keras.models import Model

from keras.layers import Dense, Input

from sklearn import preprocessing

from sklearn.metrics import mean_squared_error

from keras.models import load_model



#抓取資料

cnx = mysql.connector.connect(user='xxx', password='xxx',

                              host='xxx',

                              database='xxx')



cursor = cnx.cursor()

query = ("SELECT id, q, p, t,angle FROM xxx  ")



cursor = cnx.cursor(buffered=True)

cursor.execute(query)



num_fields = len(cursor.description)

field_names = [i[0] for i in cursor.description]



result_set = cursor.fetchall()



cursor.close()

#cnx.close()



df=pd.DataFrame(result_set)

df.columns=field_names

data=df



data=data.values





"""

#以訓練資料的最大與最小值做正規化,這樣正規化的基準才一致

"""



data=data.astype(float)

for x in range(len(data)):

    data[x,0]=(data[x,0]-144.6760749629)/(295.0009244978-144.6760749629)

    data[x,1]=(data[x,1]-36.0807175901)/(630.5250337471-36.0807175901)

    data[x,2]=(data[x,2]-111.0659099978)/(161.5853278668-111.0659099978)

    data[x,3]=(data[x,3]-20)/(25-20)



#讀取訓練好的模型

model = load_model('xxx.h5')



pred = model.predict(data)



#計算每筆資料的MSE與對應ID

normal_id=[]

normal_mse=[]





for x in range(len(data)):    

       normal_id.append(x+1)

       mse="{0:.5f}".format(mean_squared_error(data[x], pred[x]))

       normal_mse.append(mse)


留言

這個網誌中的熱門文章

Python-相關係數矩陣實作(python-correlation matrix )

ASP.NET-後端將值傳給javascript

ASP.NET-FileUpload上傳後自動觸發button click(FileUpload upload auto trigger button click)