IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Méthodes prédictives Discussion :

[Non supervisé] SVM à une classe


Sujet :

Méthodes prédictives

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut [Non supervisé] SVM à une classe
    Bonjour,

    Dans un projet, je dois détecter des anomalies automatiquement grâce à un algorithme ;*je n’ai pas d’exemple d’anomalie, c’est pourquoi j’ai choisi un algorithme d’apprentissage non-supervisé.
    J’ai décidé de prendre l’algorithme « One-class SVM » disponible dans la bibliothèque « scikit-learn » ;*je pense que cet algorithme saura répondre à mon problème.
    J’ai essayé de comprendre l’exemple fournit sur le site scikit-learn.org, mais il y a pas mal de choses que je ne comprends pas. J’ai cherché des tutoriels, des explications sur internet ou d’autres exemples, mais je n’en ai pas trouvé.

    Quelqu’un peut-il m’éclairer à ce sujet, ou, s’il en connaît un, me donner un lien vers une explication plus approfondie ?

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    le principe d'une svm est de trouver un hyper plan qui coupe les données de manière a avoir un demi espace avec toutes les observations de la classe a et l'autre demi espace avec la classe b. le plan choisit par l'algorithme est particulier, c'est celui qui maximise la marge. (d'ou le nom : séparateur a vaste marge)
    cette algo est a la base un classifieur lineaire. pour l'utiliser sur des problème non linèaire, on utilise une astuce classique, le kernel trick. on change l'espace de représentation des données pour se placer dans un espace dans lequel le problème est linéaire. dans ton exemple il est spécifier "rbf" comme noyaux.

    la svm une classe :
    une svm une classe ça n'existe pas. comment trouver un plan qui sépare deux classes si tu n'en a qu'une ^^?
    pour palier a ça on choisit une autre stratégie classique d'entrainement, la classe de réjection.
    le principe est de générer des échantillons négatif (qui doivent être rejeté par le classifieur). tes performances vont dépendre de comment tu va générer tes échantillons, de leur nombre, etc..


    dans ton exemple, il semble que le code fit une gaussienne autour de tes inliers pour definir une frontière, ensuite il doit générer des points en dehors de cette frontière pour créer la classe de réjection.
    Ou et comment sont générés ces point est a ta discrétion.

    Pour faire simple, en plus de tes données initiales avec lesquelles tu vas entraîner ton système, ton programme est très dépendant de 2 autres chose,
    ta stratégie de génération des outliers (classe de rejection)
    le noyaux que tu choisis pour classifier les données

  3. #3
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Attention : La détection d'anomalie est d'une manière ou d'une autre supervisée.

    Tu devras toujours définir un seuil plus ou moins complexe.

    Au plaisir de te lire.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Merci pour vos réponses dont je viens de d’apercevoir la présence

    J’ai utilisé l’algorithme « one class SVM » en suivant l’exemple du lien du premier post
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    def oneClassSVM(X_train, X_test):
        print("One class SVM")
        # Appel de la fonction/classe(?) OneClassSVM()
        clf = svm.OneClassSVM()
        # Création du modèle
        clf.fit(X_train)
        # Traitement des données de X_test
        y_pred_test = clf.predict(X_test)
        print("Affichage")
        # Là, je ne comprends pas trop jusqu’à la fin
        xx, yy = np.meshgrid(np.linspace(-3, 88), np.linspace(-1, 50))
        Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
        Z = Z.reshape(xx.shape)
        plt.title("Isolation forest")
        plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)
        b = plt.scatter(X_test[:, 0], X_test[:, 1], c='black')
        plt.show()
    Je lui ai passé deux ensembles X_train plus petit que X_test et j’ai obtenu un magnifique schéma avec plein de couleurs qui, finalement, ne m’aide pas beaucoup:

    Nom : figure_1.png
Affichages : 481
Taille : 20,4 Ko

    En fait, j’ai du mal à comprendre la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        # Là, je ne comprends pas trop jusqu’à la fin
        xx, yy = np.meshgrid(np.linspace(-3, 88), np.linspace(-1, 50))
        Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
        Z = Z.reshape(xx.shape)
        plt.title("Isolation forest")
        plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)
        b = plt.scatter(X_test[:, 0], X_test[:, 1], c='black')
        plt.show()
    Qu’est-ce qu’exactement un linspace ? une meshgrid ? c_ ? ravel() (je n’ai pas du tout compris le résumé de la documentation de celui-ci) ? decision_function ? reshape ? shape ? et à quoi servent-ils ?

    Y a-t-il un endroit où je peux en apprendre plus de manière détaillée (autre que la documentation python que je trouve mal faite parfois) ?

    Merci 😁

Discussions similaires

  1. Lister les méthodes non référencées d'une classe
    Par legentil dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 22/07/2010, 10h42
  2. Réponses: 1
    Dernier message: 06/11/2009, 01h20
  3. Réponses: 7
    Dernier message: 16/05/2009, 00h13
  4. Réponses: 1
    Dernier message: 26/09/2007, 18h16
  5. [D7]Méthode non accessible d'une classe à l'autre
    Par ero-sennin dans le forum Delphi
    Réponses: 2
    Dernier message: 20/03/2007, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo