2017-06-20 1 views
-2

Je travaille sur un projet qui a impliqué la détection d'anomalie à l'aide du modèle K-means.Trouvez la valeur idéale pour K en K-means (Spark Apache)

Toutefois, pour obtenir des résultats presque exacts et précis, je dois trouver la valeur optimale de K.

Mon algorithme repose sur l'idée que les valeurs aberrantes dans mon modèle seront généralement placés sur un cluster par eux-mêmes. Habituellement, les données "normales" seront regroupées avec d'autres données normales, mais les données anormales feront leur propre cluster, indiquant ainsi une anomalie. Cependant, j'ai besoin de trouver la valeur optimale de K pour que mon algorithme fonctionne et voir si c'est bon ou pas.

Toutes les idées sur la façon de trouver une bonne valeur K?

Ceci est un exemple de fichier avec des données factices « normal » que je vais utiliser pour former mon modèle:

Name Size Records 
File1 1013 105727 
File2 990  104230 
File3 1520 110542 
File4 2198 115369 
File5 2026 113430 
File6 1844 112105 
File7 1216 108159 
File8 1520 110408 
File9 1013 105359 
File10 1317 108428 
File11 1925 112553 
File12 1449 109456 
File13 1803 111436 
File14 2036 115937 
File15 2043 116383 
+1

Avez-vous envisagé d'utiliser une autre méthode de classification hiérarchique, comme le regroupement? Cela peut vous aider à choisir K si vous ne disposez pas d'un test avec un "vrai" clustering. – Peheje

+0

Et comment est-ce? Je viens de passer par le document Spark d'Apache et ils ont un support pour le clustering hiérarchique (Bisecting k-means), mais quelle est la différence et comment cela peut-il m'aider à trouver K et non les k-means normaux? – SVCS1994

+0

il existe des implémentations de dbscan pour spark. Celui-ci semble être très bien adapté à votre tâche. Si vous voulez trouver le k optimal, vous devez probablement utiliser des approches bayésiennes non paramétriques. Par exemple, un processus de restaurant chinois. Sera douleur dans le cou. – CAFEBABE

Répondre

0

Utilisez la version hiérarchique de K-means. Apache Spark a le BisectingKMeans qui fonctionne de cette manière. Il calcule une bonne valeur de K en fonction de la quantité d'enregistrements que vous avez. De cette façon, vous n'avez pas besoin de définir K (cluster) lorsque vous créez un modèle. Vous pouvez toujours définir une valeur de K si vous n'êtes pas à l'aise avec celle qui vous a été attribuée, mais cela fonctionne généralement très bien.

Merci à @Peheje pour la pointe.

+0

La désorientation des K-means ne vous donnera pas la valeur optimale de K. Elle vaut par défaut 4. –