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)
留言
張貼留言