Machine Learning-用自動編碼器來實作異常值偵測-使用python keras 執行模型(outlier detection with autoencoder using python keras run model)
當訓練好模型後,想要找到與訓練異常的資料,只要將資料餵進模型中,再將MSE依降序排列,並設定門檻值。
門檻值可以取top N或 訓練集MSE最大值等等方法,端看應用情境。
下面python keras程式碼一樣簡單示意。
門檻值可以取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)
留言
張貼留言