7
votes

Quels mots-clés distinguent la plupart des deux groupes de personnes?

J'ai une base de données de mots-clés utilisés dans les recherches par des personnes de différents groupes. Quelque chose comme: xxx

et ainsi sur

Je veux voir quels mots-clés sont la plus caractéristique d'un groupe donné. J'essaie de faire ce que Okcupid a fait dans leur blog: http://blog.okcupid.com/index.php/the-real-stuff-white-people-like/

Peut-on recommander des algorithmes / terminologies / conseils appropriés à ce sujet tâche?

(Je vais le faire en python)

Merci d'avance!


2 commentaires

Avant de faire autre chose, assurez-vous que les tailles d'échantillons sont suffisantes pour l'inférence. Vous ne voudriez pas tirer des conclusions de trop petit d'un échantillon.


Le noir et le blanc ne sont pas des courses.


3 Réponses :


2
votes

Essentiellement, ce qu'ils ont fait était de calculer est la période de fréquence de la fréquence inverse. TF-IDF


1 commentaires

Je pense que le problème de cette idée est de définir ce que sont vos documents. Si je piscine tous les mots-clés du groupe A et appelez ce document A, et de même pour le groupe B, je n'aurai que 2 documents et ce sera beaucoup trop granuleux pour TF-IDF. Si les mots-clés de chaque personne sont considérés comme un document, nous perdons la distinction du groupe A / B.



5
votes

Votre question plus ou moins récite le cas d'utilisation de base pour l'algorithme ID3. em> stry>

La sortie de l'ID3 est un classificateur, qui a une structure d'arborescence binaire ( ID3, C4.5, et al. Sont souvent appelés arbres de décision em>). L'entrée Wikipedia pour L'apprentissage de l'arbre de décision a réellement un résumé décent (au niveau de l'algorithme) de l'ID3. P>

Deux métriques habituelles dans ID3 qui détermine la manière dont la partie des données à un nœud donné devrait être divisée est appelée entropie d'informations em> strong>. (Une métrique d'occasion moins utilisée est impureté gini em>.) L'algoritme ID3 est juste un analyseur de descente récursif qui teste toutes les combinaisons de variables / valeur et scindre le nœud sur la combinaison qui donne l'entropie moyenne pondérée la plus faible.

intuitivement, l'entropie d'informations tente d'identifier la variable (colonne) et de la valeur dans cette variable qui divise les données "meilleures". Une "meilleure scission" est compatible avec notre intuition. C'est beaucoup plus facile à montrer que de décrire par prose. Considérez ce jeu de données: p> xxx pré>

si les données sont scindées sur la colonne 4 (la personne s'engage dans l'exercice aérobique pendant au moins 90 minutes par semaine?) Alors les deux groupes résultants des étiquettes de classe ressemblent à ceci: p>

Oui Groupe: [TRUE, TRUE, TRUE, FAUX] P>

Aucun groupe: [FALSE, FAUX, FAUX] P> P> P> P> P> P> Presque, mais pas tout à fait une hétérogénéité parfaite parmi les deux groupes. Donc, évidemment colonne 4 est la "meilleure" variable sur laquelle scinder ces données. P>

La métrique utilisée dans l'algorithme ID3 pour déterminer la meilleure scission est juste un formalisme mathématique de cette intuition. P> Ce n'est pas une analogie parfaite (mathématiquement précise), mais à peu près, vous pouvez penser à l'entropie d'informations liée à des variables catégoriques (valeurs discrètes) car la variance est liée à des variables continues (flotteurs). En d'autres termes - l'entropie d'information (grossièrement) exprime la variance em> (ou l'écart type) de données discrètes. P>

Voici une fonction python pour calculer l'entropie forte> (en utilisant numpy em>): p> xxx pré>

La fonction d'entropie ci-dessus n'est que ces deux expressions combinées et réduites au code: p>

# simulate a data set with three class labels (0 1, 2)
# for your problem, the class labels are the keywords, 
# so just map each unique keyword to an integer value (e.g., { 'keyword1' : 0, 'keyword2' : 1}
>>> x = NP.random.randint(0, 3, 20)
>>> x
   array([1, 0, 0, 0, 1, 1, 2, 1, 1, 1, 2, 2, 0, 2, 0, 1, 1, 1, 1, 1])

>>> print("{0:.3f}".format(entropy(x)))
   0.758


3 commentaires

Hmmm, je suis tous deux d'accord et en désaccord. Une colonne de même «bonne» pour diviser les données sur la hauteur. Une hauteur inférieure à 162 (cm I suppose) offre le même résultat que l'exercice de 90 minutes par semaine. Vous avez besoin d'une logique associative ainsi que d'un calcul de calcul sinon vous pouvez vous retrouver avec des associations qui ne veulent rien dire.


@ Ben - Non, la «logique associative» n'est pas nécessaire ou utile ici. ID3 fonctionne en faisant une chose simple: appeler de manière récursive la fonction d'entropie contre les différentes combinaisons de paires de données. Si cela réussit, chaque nœud de terminal sera composé de données comportant une seule étiquette de classe (non sélectionnée). Traversal à travers cet arbre binaire du nœud racine à une feuille de terminal est la façon dont un arbre de décision classifie de nouveaux points de données - et comme tous les algorithmes d'apprentissage de la machine dont je suis conscient, ne fait aucune tentative de discernement de mécanisme sous-jacent pour expliquer pourquoi les données ont l'air façon ça fait.


Merci un bouquet Doug. Je vais commencer à lire / penser soigneusement à travers votre réponse (cela prendra un certain temps .....).



0
votes

Je pense que le meilleur choix est Chi ^ 2, Infogain, TFIDF, propabilité conditionnelle. Pourquoi quelles sont toutes de la complexité liniear. Tous les arbres de décision ne sont pas très évolutifs lorsque nous parlons de données de texte. Mais pour la calculation de ces propriétés, nous pouvons utiliser n'importe quel outil index comme Lucene. Mon conseil est donc de calculer le gain d'informations pour chaque mot et de sélectionner le mieux. http://en.wikipedia.org/wiki/information_gain_in_decision_trees


0 commentaires