je un ensemble de données de formation qui ne contient pas des valeurs aberrantes:sklearn: Détection des anomalies en utilisant les forêts d'isolement
train_vectors.shape
(588649, 896)
Et, j'ai un autre ensemble de vecteurs de test (test_vectors
), et tous sont des valeurs aberrantes.
Voici ma tentative de faire la détection des valeurs aberrantes:
from sklearn.ensemble import IsolationForest
clf = IsolationForest(max_samples=0.01)
clf.fit(train_vectors)
y_pred_train = clf.predict(train_vectors)
print(len(y_pred_train))
print(np.count_nonzero(y_pred_train == 1))
print(np.count_nonzero(y_pred_train == -1))
Output:
588649
529771
58878
Donc, voici le pourcentage des valeurs aberrantes est d'environ 10%, ce qui est le paramètre de contamination par défaut utilisé pour les forêts d'isolement dans sklearn. Veuillez noter qu'il n'y a pas de valeurs aberrantes dans l'ensemble d'apprentissage.
Code d'essai et résultats:
y_pred_test = clf.predict(test_vectors)
print(len(y_pred_test))
print(np.count_nonzero(y_pred_test == 1))
print(np.count_nonzero(y_pred_test == -1))
Output:
100
83
17
Ainsi, il ne détecte que 17 anomalies sur la 100. Quelqu'un peut-il s'il vous plaît me dire comment améliorer les performances. Je ne suis pas du tout sûr pourquoi l'algorithme exige que l'utilisateur spécifie le paramètre de contamination. Il est clair pour moi qu'il est utilisé comme seuil, mais comment dois-je savoir à l'avance sur le niveau de contamination. Je vous remercie! IsolationForest fonctionne un peu différemment de ce que vous avez décrit :) :)
Je vois. Mais, comment puis-je connaître le pourcentage aberrant à l'avance? – user1274878
@ user1274878 Je sais que je sais ... vous ne pouvez pas vraiment savoir, mais, soit vous avez une estimation, par exemple. vos valeurs aberrantes sont rares à cause de certaines hypothèses, ou vous avez différents ensembles de données et vous savez plus ou moins à quoi vous attendre. Dans les deux cas, exécutez des expériences pour évaluer et régler vos paramètres [plus d'infos] (https://stackoverflow.com/a/43271326/3433323) Btw, Isolation Forest fonctionne sur l'hypothèse que vos valeurs aberrantes sont peu nombreuses et peuvent être facilement séparées ("peu et différent"). – mkaran
a testé oneClassSVM selon votre suggestion, et cela prend des heures pour cet ensemble de données. Utilise seulement un seul noyau et environ 90% de la mémoire. Pouvez-vous s'il vous plaît me diriger vers une implémentation efficace? – user1274878