Fusionner des données rares et denses dans l'apprentissage automatique pour améliorer les performances

17

J'ai des caractéristiques clairsemées qui sont prédictives, j'ai aussi des caractéristiques denses qui sont également prédictives. J'ai besoin de combiner ces fonctionnalités pour améliorer les performances globales du classificateur.

Maintenant, le problème est que lorsque j'essaie de les combiner, les entités denses ont tendance à dominer davantage les entités clairsemées, ce qui ne donne qu'une amélioration de 1% de l'ASC par rapport au modèle avec uniquement des entités denses.

Quelqu'un a-t-il rencontré des problèmes similaires? J'apprécie vraiment les entrées, un peu coincées. J'ai déjà essayé beaucoup de classificateurs différents, une combinaison de classificateurs, des transformations de fonctionnalités et un traitement avec différents algorithmes.

Merci d'avance pour l'aide.

Modifier :

J'ai déjà essayé les suggestions qui sont données dans les commentaires. Ce que j'ai observé, c'est que pour près de 45% des données, les entités clairsemées fonctionnent très bien, j'obtiens l'ASC d'environ 0,9 avec uniquement des entités clairsemées, mais pour les autres, les entités denses fonctionnent bien avec l'ASC d'environ 0,75. J'ai en quelque sorte essayé de séparer ces ensembles de données, mais j'obtiens l'AUC de 0,6, donc je ne peux pas simplement former un modèle et décider quelles fonctionnalités utiliser.

En ce qui concerne l'extrait de code, j'ai essayé tellement de choses que je ne sais pas exactement quoi partager :(

Sagar Waghmode
la source
Vos fonctionnalités sont-elles rares? Sont-ils remplis à 1% ou même moins?
João Almeida
2
Vous devez également noter que si vos entités sont rares, elles ne devraient aider qu'à classer une petite partie de votre ensemble de données, ce qui signifie que la précision globale ne devrait pas changer de manière significative. C'est une sorte de supposition, car je ne sais pas quelles sont les caractéristiques de votre ensemble de données.
João Almeida
@ JoãoAlmeida Ils ne sont pas si rares. Ils sont remplis à environ 5%. Le problème est quand je regarde la différence dans les prédictions de deux modèles, où les prédictions diffèrent, le modèle avec des fonctionnalités clairsemées a tendance à mieux fonctionner, c'est pourquoi je m'attendais à ce qu'il voit le boost dans l'ASC aussi quand je les combinais avec des fonctionnalités denses . Je reçois un coup de pouce, mais semble très faible.
Sagar Waghmode du
hum ... Je n'ai aucune idée pour toi alors
João Almeida
j'ai rencontré le même problème, peut-être simplement mettre une fonctionnalité dense et clairsemée dans un seul modèle n'est pas un bon choix. vous pouvez peut-être essayer un modèle large et profond. large pour les entités clairsemées et profond pour les entités denses, si vous avez essayé cette méthode, dites-moi s'il vous plaît la réponse.
Jianye Ji

Réponses:

6

Cela semble être un travail pour l'analyse des composants principaux. Dans Scikit, PCA est bien implémenté et cela m'a aidé à plusieurs reprises.

PCA, d'une certaine manière, combine vos fonctionnalités. En limitant le nombre de composants, vous récupérez votre modèle avec des données sans bruit (dans le meilleur des cas). Parce que votre modèle est aussi bon que vos données.

Considérez ci-dessous un exemple simple.

from sklearn.pipeline import Pipeline
pipe_rf = Pipeline([('pca', PCA(n_components=80)),
                    ('clf',RandomForestClassifier(n_estimators=100))])
pipe_rf.fit(X_train_s,y_train_s)

pred = pipe_rf.predict(X_test)

Pourquoi j'ai choisi 80? Lorsque je trace la variance cumulée, je l'ai ci-dessous, ce qui me dit qu'avec ~ 80 composants, j'atteins presque toute la variance. variance cumulative

Je dirais donc l'essayer, l'utiliser dans vos modèles. Ça devrait aider.

HonzaB
la source
4

La meilleure façon de combiner des fonctions consiste à utiliser des méthodes d'ensemble. Fondamentalement, il existe trois méthodes différentes: l'ensachage, le boosting et l'empilage. Vous pouvez soit utiliser Adabbost augmenté avec la sélection de fonctionnalités (dans ce cas, considérer les fonctionnalités rares et denses) ou empiler (fonctionnalité aléatoire - sous-espace aléatoire) Je préfère la deuxième option, vous pouvez former un ensemble d'apprenants de base (décisions. Arbres) en utilisant aléatoire sous-ensembles et fonctionnalité aléatoire (garder les apprenants de la base de formation jusqu'à ce que vous couvriez l'ensemble des fonctionnalités) L'étape suivante consiste à tester l'ensemble de formation pour générer les métadonnées. Utilisez ces métadonnées pour former un méta classificateur. Le méta classificateur déterminera quelle caractéristique est la plus importante et quel type de relation doit être utilisé

Bashar Haddad
la source
Pouvez-vous s'il vous plaît partager la documentation pertinente? Vous n'avez pas exactement compris ce que vous vouliez dire?
Sagar Waghmode
Vous pouvez lire un article sur le jalonnement "Problèmes dans les techniques d'empilement, 1999" lire sur stackingC. Il est très important de savoir que je parle de l'ensemble du vecteur (par exemple 1x36 dans le cas de Hog) en tant que caractéristique unique, mais pas de ses dimensions. Vous devez suivre quelle fonctionnalité utilisée avec quel apprenant de base. Faites attention au problème de surajustement
Bashar Haddad
Si vous donnez plus de détails sur la base de données, le nombre de classes, le nombre d'échantillons, le code, ce que vous avez essayé, ce que vous avez remarqué, avez-vous un problème de déséquilibre des données, des échantillons bruyants, ... Etc. Tous ces détails sont importants et peuvent aider à sélectionner la meilleure méthode. Donnez-moi plus de détails si ça va et je peux vous aider d'une meilleure façon
Bashar Haddad
1

Les groupes variables peuvent être multicollinéaires ou la conversion entre clairsemée et dense peut mal tourner. Avez-vous pensé à utiliser un classificateur de vote / une classification d'ensemble? http://scikit-learn.org/stable/modules/ensemble.html De cette façon, vous pourriez traiter les deux problèmes ci-dessus.

Diego
la source
J'ai déjà essayé les techniques d'ensemble ainsi que les classificateurs de vote. Toujours pas de chance.
Sagar Waghmode
Voyez-vous donc beaucoup de chevauchement entre les prédictions des deux ensembles de données? Peut-être y a-t-il en effet aucune nouvelle information? C'est-à-dire que les données racontent la même histoire.
Diego
oui, j'ai fait exactement cela. Bien que les prévisions ne soient pas entièrement différentes, le nombre d'échantillons où les prévisions diffèrent sont assez élevés (environ 15-20%) des données. Pour ces échantillons, le modèle avec des entités clairsemées est plus performant que celui d'un modèle avec des entités denses. Mon point est que si les fonctionnalités clairsemées fonctionnent mieux, pourquoi ne sont-elles pas des fonctionnalités importantes dans l'un des modèles que j'ai essayés jusqu'à présent.
Sagar Waghmode
Quel algorithme de prédicteur utilisez-vous?
Diego
J'ai essayé pas mal d'algorithmes et je me suis installé sur le modèle boosté par gradient, j'utilise également beaucoup de forêts aléatoires pour mon problème.
Sagar Waghmode du
1

En plus de certaines des suggestions ci-dessus, je recommanderais d'utiliser une approche de modélisation en deux étapes .

  1. Utilisez d'abord les fonctionnalités clairsemées et développez le meilleur modèle.
  2. Calculez la probabilité prédite à partir de ce modèle.
  3. Introduisez cette estimation de probabilité dans le deuxième modèle (en tant qu'entité d'entrée), qui incorporerait les entités denses. En d'autres termes, utilisez toutes les entités denses et l'estimation de probabilité pour construire le deuxième modèle.
  4. Le classement final sera alors basé sur le deuxième modèle.
Vishal
la source
0

Essayez PCA uniquement sur des fonctionnalités rares et combinez la sortie PCA avec des fonctionnalités denses.

Ainsi, vous obtiendrez un ensemble dense de fonctionnalités (originales) + un ensemble dense de fonctionnalités (qui étaient initialement clairsemées).

+1 pour la question. Veuillez nous mettre à jour avec les résultats.

Tagar
la source
Wow, cela a en fait fait baisser l'AUC :( Je ne sais pas trop ce que cela signifie, je dois vérifier l'importance des fonctionnalités et tout. cette perte d'information peut avoir fait baisser l'AUC
Sagar Waghmode
Intéressant. Merci d'avoir partagé. Nous avons un ensemble de données très similaire au vôtre (fonctionnalités éparses 1k-2k). Par curiosité, combien de composants principaux avez-vous générés? Si ce nombre est trop faible, cela peut expliquer pourquoi l'AUC a baissé.
Tagar
Comme je l'ai déjà dit, j'ai généré 1k composants principaux qui expliquaient la variance de 0,97.
Sagar Waghmode du