Erinevate anomaaliate tuvastamise tehnikate õppimine

Erinevate anomaaliate tuvastamise tehnikate õppimine

Allikasõlm: 1867449

Kasutasime oma andmete normaalseks muutmiseks standardskaalarit ja joonistasime hajuvusgraafiku.

Nüüd impordime DBSCAN-i, et anda klastritele punkte. Kui see ebaõnnestub, kuvatakse -1.

Nüüd on tulemused käes, aga kuidas kontrollida, milline väärtus on min, max ja kas meil on -1 väärtused? Kasutame klastri väikseima väärtuse kontrollimiseks arg min väärtust.

Tulemusest näeme kuus väärtust, mis on -1.

Joonistame nüüd hajuvusgraafiku.

Ülaltoodud meetodid, mida me kasutasime, on ühemuutujatel kõrvalekalded.

Mitme muutujaga kõrvalekallete tuvastamiseks peame mõistma mitme muutujaga kõrvalekaldeid.

Näiteks võtame Auto näidud. Oleme näinud kahte näidumõõturit, millest üks on odomeetri jaoks, mis salvestab või mõõdab sõiduki liikumiskiirust, ja teine ​​on pöörete arvu näit, mis registreerib auto ratta pöörlemiste arvu minutis.

Oletame, et läbisõidumõõdik näitab kiirust vahemikus 0–60 mph ja pööret minutis 0–750. Eeldame, et kõik tulevad väärtused peaksid omavahel korreleeruma. Kui läbisõidumõõdik näitab kiirust 50 ja pööret minutis 0 sisselaskeaega, on näidud valed. Kui läbisõidumõõdik näitab väärtust, mis on suurem kui null, tähendab see, et auto liikus, nii et pöörete arv minutis peaks olema suurem, kuid meie puhul näitab see väärtust 0. st mitme muutujaga kõrvalekalded.

C. Mahalanobise kauguse meetod

DBSCANis kasutasime eukleidilise kauguse mõõdikuid, kuid antud juhul räägime Mahalanobise kaugusmeetodist. Mahalanobise distantsi saame kasutada ka DBSCANiga.

DBSCAN(eps=0.5, min_samples=3, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)

Miks on Eukleidese üksteisega seotud olemite jaoks sobimatu? Eukleidiline kaugus ei leia või annab valesid andmeid selle kohta, kui lähedal on kaks punkti.

Mahalanobise meetod kasutab punktide ja jaotuse vahelist kaugust, mis on puhtad andmed. Eukleidiline kaugus on sageli kahe punkti vahel ja selle z-skoor arvutatakse x miinus keskmine ja jagatakse standardhälbega. Mahalanobises on z-skoor x miinus keskmine jagatuna kovariatsioonimaatriksiga.

Seega, millist mõju avaldab kovariatsioonimaatriksiga jagamine? Kovariatsiooni väärtused on kõrged, kui teie andmestiku muutujad on tugevas korrelatsioonis.

Samamoodi, kui kovariatsiooni väärtused on madalad, ei vähene kaugus oluliselt, kui andmed ei ole korrelatsioonis. See toimib nii hästi, et käsitleb nii muutujate ulatuse kui ka korrelatsiooni probleeme.

kood

Andmestiku saab võtta kohast Anomaly-/caret.csv at main · aster28/Anomaly- (github.com)

df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()

Funktsiooni kauguse määratlesime järgmiselt: x = Puudub, andmed = Puudub ja Kovariatsioon = Puudub. Funktsiooni sees võtsime andmete keskmise ja kasutasime seal oleva väärtuse kovariatsiooniväärtust. Vastasel juhul arvutame kovariatsioonimaatriksi. T tähistab transponeerimist.

Näiteks kui massiivi suurus on viis või kuus ja soovite, et see oleks kahes muutujas, siis peame maatriksi transponeerima.

np.random.multivariate_normal(mean, cov, size = 5)
array([[ 0.0509196, 0.536808 ], [ 0.1081547, 0.9308906], [ 0.4545248, 1.4000731], [ 0.9803848, 0.9660610], [ 0.8079491 , 0.9687909]])
np.random.multivariate_normal(mean, cov, size = 5).T
array([[ 0.0586423, 0.8538419, 0.2910855, 5.3047358, 0.5449706], [ 0.6819089, 0.8020285, 0.7109037, 0.9969768, -0.7155739]])

Kasutasime sp.linalg, mis on lineaarne algebra ja millel on erinevad funktsioonid, mida lineaaralgebral täita. Sellel on maatriksi inversiooni funktsioon inv. NumPy punkt maatriksi korrutamise vahendina.

import scipy kui sp def distance(x=None, data=none, cov=none): x_m = x - np.mean(data), kui mitte cov: cov = np.cov(andmed.values.T) inv_cov = sp. linalg.inv(cov) left = np.dot(x_m, inv_cov) m_distance = np.dot(left, x_m.T) return m_distance.diagonal() df_g= df[['karaat', "sügavus", "hind" ]].head(50) df_g['m_distance'] = kaugus(x=df_g, data=df[['karaat', "sügavus", "hind"]]) df_g.head()

B. Tukey meetod kõrvalekallete tuvastamiseks

Tukey meetodit nimetatakse sageli ka Box and Whisker või Box plot meetodiks.

Tukey meetod kasutab ülemist ja alumist vahemikku.

Ülemine vahemik = 75. protsentiil -k*IQR

Alumine vahemik = 25. protsentiil + k* IQR

Vaatame oma Titanicu andmeid koos vanusemuutujaga kastdiagrammi abil.

sns.boxplot(titanic['vanus'].values)

Näeme pildil, et Seaborni loodud kast näitab, et paljud punktid vanuses 55–80 on kõrvalekalded, mis ei kuulu kvartiilidesse. Tuvastame alumise ja ülemise vahemiku, tehes funktsiooni outliers_detect.

def outliers_detect(x, k = 1.5): x = np.massiiv(x).copy().astype(float) first = np.quantile(x, .25) third = np.quantile(x, .75) # IQR arvutamine iqr = kolmas - esimene #Ülemine vahemik ja alumine vahemik alumine = esimene - (k * iqr) ülemine = kolmas + (k * iqr) tagasi madalam, ülemine
outliers_detect(titanic['vanus'], k = 1.5)
(2.5, 54.5)

D. PyCareti tuvastamine

Kasutame PyCareti tuvastamiseks sama andmestikku.

failist pycaret.anomaly import * setup_anomaly_data = setup(df)

Pycaret on avatud lähtekoodiga masinõpe, mis kasutab kõrvalekallete tuvastamiseks järelevalveta õppemudelit. Sellel on meetod get_data andmestiku kasutamiseks Pycaretis endas, set_up eeltöötlustoimingu jaoks enne tuvastamist, tavaliselt võtab see andmeraami, kuid sellel on ka palju muid funktsioone, nagu ignore_features jne.

Muud meetodid create_model algoritmi kasutamiseks. Esmalt kasutame Isolation Foresti.

ifor = create_model("iforest") plot_model(ifor) ifor_predictions = ennusta_mudel(ifor, data = df) print(ifor_predictions) ifor_anomaly = ifor_predictions[ifor_predictions["Anomaalia"] == 1] print(ifor_anomaly()) print(.head()) ifor_anomaly.shape)

Anomaalia 1 näitab kõrvalekaldeid ja anomaalia 0 ei näita kõrvalekaldeid.

Kollane värv tähistab siin kõrvalekaldeid.

Vaatame nüüd teist algoritmi, K Nearest Neighbors (KNN)

knn = loo_mudel("knn") plot_model(knn) knn_pred = ennusta_mudel(knn, andmed = df) print(knn_pred) knn_anomaly = knn_pred[knn_pred["Anomaalia"] == 1] knn_anomaalia.

Nüüd kasutame klasterdamisalgoritmi.

clus = create_model("cluster") plot_model(clus) clus_pred = ennusta_mudel(clus, data = df) print(clus_pred) clus_anomaly = clus_predictions[clus_pred["Anomaalia"] == 1] print(clus_anomaly.head()) clus._anomaly. kuju

E. Anomaalia tuvastamine PyOD abil

PyOD on pythoni teek mitme muutujaga andmete kõrvalekallete tuvastamiseks. See on hea nii juhendatud kui ka juhendamata õppimiseks.

pyod.models.iforest import IForest saidilt pyod.models.knn import KNN 

Importisime raamatukogu ja algoritmi.

failist pyod.utils.data import gener_data saidilt pyod.utils.data import hinnata_print saidilt pyod.utils.example import visualize train= 300 test=100 contaminate = 0.1 X_train, X_test, y_train, y_test = gener_data(n_train_test=train) , n_features=2,contamination=contaminate,random_state=42)
cname_alg = 'KNN' # algoritmi nimi on K Lähimad naabrid c = KNN() c.fit(X_train) #Sobita algoritm y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.testscore)sdicty c.decision_function(X_test) print("Treeningu andmed:") hinda y_trainpred,y_testpred, show_figure=Tõene, save_figure=Tõene)

Kasutame IForesti algoritmi.

fname_alg = 'IFets' # algoritmi nimi on K Lähimad naabrid f = IForest() f.fit(X_train) #Sobita algoritm y_train_pred = c.labels_ y_train_scores = c.decision_scores_ =c_test_scores_ =test_predic_spred(c_test_score) c.decision_function(X_test) print("Treeninguandmed:") assessment_print(fname_alg, y_train_pred, y_train_scores) print("Testiandmed:") assessment_print(fname_alg, y_test_pred, y_test_scores) visualize(fname_in,_test_in, Xpre_in, Xpred_y, X y_train_pred,y_test_pred, show_figure=Tõene, save_figure=Tõene)

F. Prohveti anomaalia tuvastamine

Kasutame aegridadega lennureisijate andmestikku prophet/example_air_passengers.csv at main · aster28/prophet (github.com)

import prohvet prohvetist import ennustaja prohvetist import Prohvet m = Prohvet()
data = pd.read_csv('air_pass.csv') data.head()
data.columns = ['ds', 'y'] data['y'] = np.where(data['y'] != 0, np.log(data['y']), 0)

Veeru y logi ei võimalda negatiivset väärtust. Jagasime oma andmed rongideks, testisime ja salvestasime ennustuse muutuja prognoosi.

train, test= train_test_split(data, random_state =42) m.fit(train[['ds','y']]) prognoos = m.predict(test) def detect(forecast): forcast = prognoos[['ds ', 'yhat', 'yhat_lower', 'yhat_upper']].copy() forcast['real']= data['y'] forcast['anomaly'] =0 forcast.loc[forcast['real'] > forcast['yhat_upper'], 'anomaly']=1 forcast.loc[forcast['real']< forcast['yhat_lower'], 'anomaly']=-1 forcast['imp']=0 in_range = forcast ['yhat_upper']-forcast['yhat_lower'] forcast.loc[forcast['anomaly']==1, 'imp'] = forcast['real']-forcast['yhat_upper']/vahemikus forcast.loc[ forcast['anomaly']==-1, 'imp']= forcast['yhat_lower']-forcast['real']/in_range tagastamise prognoos
tuvasta (ennustus)

Võtsime anomaaliaks -1.

Järeldus

Anomaaliate tuvastamise protsessi nimetatakse antud andmekogumist kõrvalekallete tuvastamiseks. Kõrvalekalded on andmeobjektid, mis eristuvad ülejäänud andmekogumi objektiväärtustest ega käitu normaalselt.

Anomaaliate tuvastamise ülesanded võivad kasutada kaugusepõhiseid ja tiheduspõhiseid klastrite moodustamise meetodeid, et tuvastada kõrvalekalded klastrina.

Arutame siin anomaaliate tuvastamise erinevaid meetodeid ja selgitame neid, kasutades Titanicu, Air reisijate ja Careti kolme andmekogumi koodi.

Võtmepunktid

1. Kõrvalekaldeid või kõrvalekaldeid saab tuvastada Box-Whisker meetodi või DBSCANi abil.

2. Eukleidilise kauguse meetodit kasutatakse üksustega, mis ei ole korrelatsioonis.

3. Mahalanobise meetodit kasutatakse mitme muutujaga kõrvalekalletega.

4. Kõik väärtused või punktid ei ole kõrvalekalded. Mõned on mürad, mis peaksid olema prügi. Kõrvalekalded on kehtivad andmed, mida tuleb korrigeerida.

5. Kasutasime PyCaret'i kõrvalekallete tuvastamiseks, kasutades erinevaid algoritme, kus anomaalia on üks, mis on näidatud kollaste värvidega, ja mitte ühtegi kõrvalekallet, kui kõrvalekalle on 0.

6. Kasutasime PyOD-i, mis on Python Outlieri tuvastamise teek. Sellel on rohkem kui 40 algoritmi. Kasutatakse järelevalve all ja järelevalveta tehnikaid.

7. Kasutasime Prophet ja määratlesime funktsiooni tuvastamine, et välja tuua kõrvalekalded.

Selles artiklis näidatud meedia ei kuulu Analytics Vidhyale ja seda kasutatakse autori äranägemisel.

Ajatempel:

Veel alates Analüütika Vidhya