2

je besoin d'un algorithme d'apprentissage automatique qui satisfera aux exigences suivantes:Apprentissage automatique - classification d'une classe/détection de nouveauté/évaluation d'anomalie?

  • Les données de formation sont un ensemble de vecteurs de caractéristiques, tous appartenant à la même classe « positive » (que je ne peux pas produire des échantillons de données négatives) .
  • Les données de test sont des vecteurs caractéristiques appartenant ou non à la classe positive.
  • La prédiction devrait être une valeur continue, qui devrait indiquer la «distance» des échantillons positifs (0 signifie que l'échantillon d'essai appartient clairement à la classe positive et 1 signifie clairement négatif, mais 0,3 signifie qu'il est plutôt positif

Exemple: Supposons que les vecteurs caractéristiques soient des vecteurs de caractéristiques 2D.

données d'entraînement positif:

  • (0, 1), (0, 2), (0, 3)

données de test:

  • (0, 10) devrait être une anomalie, mais pas une anomalie distincte
  • (1, 0) devrait être une anomalie, mais avec un "rang" plus élevé que (0, 10)
  • (1, 10) devrait être une anomalie, avec une anomalie encore plus élevée "rank"
+0

L'idée est d'examiner la « distance » des exemples positifs (comme dans la détection d'anomalie) . Je cherche en fait un algo de détection d'anomalie en pourcentages (quelle est l'échelle de l'anomalie) – ido4848

+0

Pouvez-vous être plus précis, p. Quelles sont vos données? Pouvez-vous fournir des exemples de données d'entrée et ce que vous attendez en conséquence? – miraculixx

+0

@miraculixx J'ai ajouté un exemple – ido4848

Répondre

2

Le problème que vous avez décrit est généralement appelé détection de valeurs aberrantes, anomalie ou nouveauté. Il existe de nombreuses techniques qui peuvent être appliquées à ce problème. Un bon aperçu des techniques de détection de la nouveauté peut être trouvé here. L'article donne une classification détaillée des techniques et une brève description de chacun, mais comme un début, je vais énumérer quelques-unes des plus standard:

  • K-nearest neighbors - une méthode basée sur la distance simple qui suppose que les échantillons de données normales sont proches d'autres échantillons de données normaux, tandis que les nouveaux échantillons sont situés loin des points normaux. L'implémentation Python de KNN peut être trouvée dans ScikitLearn. (Par exemple, modèle de mélange gaussien) - modèles probabilistes modélisant la fonction de densité de probabilité générative des données, par exemple en utilisant un mélange de distributions gaussiennes. Étant donné un ensemble d'échantillons de données normaux, le but est de trouver les paramètres d'une distribution de probabilité afin de mieux décrire les échantillons. Ensuite, utilisez la probabilité d'un nouvel échantillon pour décider s'il appartient à la distribution ou s'il s'agit d'une valeur aberrante. ScikitLearn implémente Gaussian Mixture Models et utilise l'algorithme de maximisation des attentes pour les apprendre.
  • Machine à vecteur de support (SVM) à une classe - extension de la norme SVM classifier qui tente de trouver une limite séparant les échantillons normaux des nouveaux échantillons inconnus (dans l'approche classique, la limite est trouvée en maximisant la marge entre les échantillons normaux et l'origine de l'espace, projetés dans ce qu'on appelle "l'espace des caractéristiques"). ScikitLearn a une implémentation de one-class SVM qui vous permet de l'utiliser facilement, et un joli example.Je joins l'intrigue de cet exemple pour illustrer la limite d'une classe SVM trouve les échantillons de données normales « autour »: enter image description here
+0

En ce qui concerne les modèles de mélange, quand vous dites "utiliser la probabilité d'un nouvel échantillon pour décider s'il appartient à la distribution ou est une valeur aberrante", quelle probabilité est-ce exactement? Par exemple, la méthode predict_proba de sci-kit GMM (http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture) renvoie un vecteur de probabilités dont la somme est égale à 1. J'espérais qu'une nouveauté retournerait un vecteur avec de très faibles probabilités pour tous les composants, ne faisant pas nécessairement une somme de 1. – felipeduque