Quel algorithme dois-je utiliser pour regrouper un énorme ensemble de données binaires en quelques catégories?

11

J'ai une grande matrice (650K lignes * 62 colonnes) de données binaires (0-1 entrées uniquement). La matrice est généralement clairsemée: environ 8% est remplie.

Je voudrais le regrouper en 5 groupes - disons nommés de 1 à 5. J'ai essayé le regroupement hiérarchique et il n'a pas pu gérer la taille. J'ai également utilisé un algorithme de clustering k-means basé sur la distance de hamming, compte tenu des vecteurs de 650 K bits de longueur 62. Je n'ai obtenu de résultats appropriés avec aucun de ces éléments.

Veuillez aider.

Illimité26
la source
Je ne peux pas commenter b / c de mon 1 représentant, j'ai donc dû taper ceci comme réponse. Vous pourriez vous pencher sur la similitude Jaccard. Je pense que python scipy en a des implémentations. Jaccard ...
gobrewers14
Y a-t-il une raison de supposer que les données se répartissent naturellement en cinq groupes, au moins dans une certaine mesure? Êtes-vous vraiment intéressé par le regroupement de lignes, ou êtes-vous également intéressé par les relations entre les 62 traits codés dans les vecteurs de bits? Si ce dernier, alors d'autres techniques sont plus appropriées.
micans

Réponses:

4

Vous posez la mauvaise question.

Au lieu de demander "quel algorithme", vous devriez demander "qu'est-ce qu'une catégorie / cluster significatif dans votre application".

Je ne suis pas surpris que les algorithmes ci-dessus n'aient pas fonctionné - ils sont conçus pour des cas d'utilisation très différents. k-means ne fonctionne pas avec d'autres distances arbitraires. Ne l'utilisez pas avec une distance de Hamming. Il y a une raison pour laquelle il est appelé k- signifie , il n'a de sens que lorsque la moyenne arithmétique est significative (ce qui n'est pas le cas pour les données binaires).

Vous voudrez peut-être essayer les modes k à la place, IIRC c'est une variante qui est en fait destinée à être utilisée avec des données catégorielles, et les données binaires sont quelque peu catégorielles (mais la rareté peut toujours vous tuer).

Mais tout d'abord, avez-vous supprimé les doublons pour simplifier vos données et supprimé les colonnes uniques / vides par exemple?

Peut-être qu'APRIORI ou des approches similaires sont également plus significatives pour votre problème.

Quoi qu'il en soit, déterminez d'abord ce dont vous avez besoin, puis quel algorithme peut résoudre ce défi. Travaillez en fonction des données , pas en essayant des algorithmes aléatoires.

A QUIT - Anony-Mousse
la source
Pouvez-vous expliquer pourquoi "Ne pas utiliser avec la distance de Hamming"? Cela pourrait avoir du sens, après tout, il est disponible dans Matlab. Cela ne me dérange pas d'ouvrir une nouvelle question, si cela a du sens.
Dror Atariah
À cause de la moyenne. La moyenne arithmétique n'a pas de sens avec la distance de Hamming ou les données binaires. Utilisez plutôt le mode ou medoid .
A QUIT - Anony-Mousse
Juste pour être sûr de bien faire les choses: matlab utilise la moyenne arithmétique lors de la mise à jour des centroïdes lors de l'utilisation des k-means avec la métrique hamming. Est-ce correct? Quelle est la bonne façon d'utiliser cette métrique dans matlab?
Dror Atariah
k-means est appelé k- means car il utilise la moyenne. Sinon, cela s'appelle k-medoids, k-modes, etc. La moyenne est bonne pour L2 - somme des écarts au carré.
A QUIT - Anony-Mousse
Ainsi, matlab utilise k- means avec la métrique hamming; cela n'a pas beaucoup de sens.
Dror Atariah
3

Peut-être que je suis un peu en retard dans la réponse, mais cela serait probablement utile pour un organisme à l'avenir.

La théorie de la résonance adaptative est un bon algorithme pour les problèmes de classification binaire. Vérifiez à propos de ART 1. Plus d'informations que vous pouvez voir dans le livre gratuit Neural Network Design au chapitre 19.

Ce réseau combine une excellente idée biologique et une bonne implémentation mathématique. Cet algorithme est également facile à implémenter et, dans ce livre, vous pouvez également trouver des instructions étape par étape sur la façon de construire ce classificateur.

itdxer
la source
2

Un algorithme classique pour le clustering de données binaires est le modèle de Bernoulli Mixture. Le modèle peut être ajusté en utilisant des méthodes bayésiennes et peut également être ajusté en utilisant EM (Expectation Maximization). Vous pouvez trouver des exemples de code python partout dans le GitHub tandis que le premier est plus puissant mais aussi plus difficile. J'ai une implémentation C # du modèle sur GitHub (utilise Infer.NET qui a une licence restrictive!).

Le modèle est assez simple. Échantillonnez d'abord le cluster auquel appartient un point de données. Ensuite, échantillonnez indépendamment autant de Bernoullis que vous avez de dimensions dans votre jeu de données. Notez que cela implique l'indépendance conditionnelle des valeurs binaires étant donné le cluster!

Dans le cadre bayésien, les affectations antérieures par rapport au cluster sont une distribution de Dirichlet. C'est l'endroit idéal pour mettre des priorités si vous pensez que certains clusters sont plus grands que d'autres. Pour chaque cluster, vous devez spécifier au préalable, une distribution bêta, pour chaque distribution de Bernoulli. Typiquement, cet a priori est Beta (1,1) ou uniforme. Enfin, n'oubliez pas d'initialiser au hasard les affectations de cluster lorsque des données sont fournies. Cela rompra la symétrie et l'échantillonneur ne restera pas bloqué.

Il existe plusieurs fonctionnalités intéressantes du modèle BMM dans un cadre bayésien:

  1. Clustering en ligne (les données peuvent arriver sous forme de flux)

  2. Le modèle peut être utilisé pour déduire les dimensions manquantes

Le premier est très pratique lorsque l'ensemble de données est très volumineux et ne tient pas dans la RAM d'une machine. Le second peut être utilisé dans toutes sortes de tâches d'imputation de données manquantes, par exemple. imputation de la moitié manquante de l'image binaire MNIST.

Vladislavs Dovgalecs
la source