[PYTHON] [Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn

À propos de la classification des sujets LDA

--LDA = allocation de dirichelet latente

Dans LDA, chaque mot d'une phrase appartient à un sujet caché (sujet, catégorie), et le sujet est déduit en supposant que la phrase est générée à partir de ce sujet selon une distribution de probabilité.

--alpha;: Paramètres pour obtenir le sujet --beta;: Paramètres pour obtenir les mots du sujet --theta;: paramètre de distribution polynomiale --w: mot --z: sujet

Cette fois, j'utiliserai cette LDA pour vérifier si les phrases peuvent être classées par sujet.

base de données

20 Validé à l'aide de groupes de discussion

comp.graphics
comp.os.ms-windows.misc
comp.sys.ibm.pc.hardware
comp.sys.mac.hardware
comp.windows.x
rec.autos
rec.motorcycles
rec.sport.baseball
rec.sport.hockey
sci.crypt
sci.electronics
sci.med
sci.space
talk.politics.misc
talk.politics.guns
talk.politics.mideast
talk.religion.misc
alt.atheism
misc.forsale
soc.religion.christian

--Cette fois, nous utilisons les 4 types suivants

Apprentissage

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import LatentDirichletAllocation
import mglearn
import numpy as np

#data 
categories = ['rec.sport.baseball', 'rec.sport.hockey', \
                'comp.sys.mac.hardware', 'comp.windows.x']
twenty_train = fetch_20newsgroups(subset='train',categories=categories, \
                                            shuffle=True, random_state=42)
twenty_test = fetch_20newsgroups(subset='test',categories=categories, \
                                            shuffle=True, random_state=42)
tfidf_vec = TfidfVectorizer(lowercase=True, stop_words='english', \
                            max_df = 0.1, min_df = 5).fit(twenty_train.data)
X_train = tfidf_vec.transform(twenty_train.data)
X_test = tfidf_vec.transform(twenty_test.data)

feature_names = tfidf_vec.get_feature_names()
#print(feature_names[1000:1050])
#print()

# train
topic_num=4
lda =LatentDirichletAllocation(n_components=topic_num,  max_iter=50, \
                        learning_method='batch', random_state=0, n_jobs=-1)
lda.fit(X_train)

Vérifiez l'état de la confirmation ci-dessous

sorting = np.argsort(lda.components_, axis=1)[:, ::-1]
mglearn.tools.print_topics(topics=range(topic_num),
                           feature_names=np.array(feature_names),
                           topics_per_chunk=topic_num,
                           sorting=sorting,n_words=10)
topic 0       topic 1       topic 2       topic 3       
--------      --------      --------      --------      
nhl           window        mac           wpi           
toronto       mit           apple         nada          
teams         motif         drive         kth           
league        uk            monitor       hcf           
player        server        quadra        jhunix        
roger         windows       se            jhu           
pittsburgh    program       scsi          unm           
cmu           widget        card          admiral       
runs          ac            simms         liu           
fan           file          centris       carina 

--topic1: ordinateur Windows --topic2: ordinateur Mac --topic0: Baseball ou hockey, ne peut pas être classé comme prévu --topic3: lié à l'ordinateur? Je ne pouvais pas classer comme prévu

On considère que le sujet 1 et le sujet 2 pourraient être classés de façon précise au stade de l'apprentissage.

inférence

Pour les données d'inférence, j'ai emprunté un article en anglais à Apple sur wikipedia. Définissez certains articles de wikipedia sur text11 et text12.

text11="an American multinational technology company headquartered in Cupertino, "+ \
        "California, that designs, develops, and sells consumer electronics,"+ \
        "computer software, and online services."
text12="The company's hardware products include the iPhone smartphone,"+ \
        "the iPad tablet computer, the Mac personal computer,"+ \
        "the iPod portable media player, the Apple Watch smartwatch,"+ \
        "the Apple TV digital media player, and the HomePod smart speaker."

Effectuer une inférence ci-dessous

# predict
test1=[text11,text12]
X_test1 = tfidf_vec.transform(test1)
lda_test1 = lda.transform(X_test1)
for i,lda in enumerate(lda_test1):
    print("### ",i)
    topicid=[i for i, x in enumerate(lda) if x == max(lda)]
    print(text11)
    print(lda," >>> topic",topicid)
    print("")

résultat

###  0
an American multinational technology company headquartered in Cupertino, California, that designs, develops, and sells consumer electronics,computer software, and online services.
[0.06391161 0.06149079 0.81545564 0.05914196]  >>> topic [2]

###  1
an American multinational technology company headquartered in Cupertino, California, that designs, develops, and sells consumer electronics,computer software, and online services.
[0.34345051 0.05899806 0.54454404 0.05300738]  >>> topic [2]

On peut dire que toutes les phrases liées à MAC (apple) ont été correctement classées car il a été déduit qu'elles étaient susceptibles d'appartenir à topic2 (ordinateur mac).

Recommended Posts

[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
Classification de l'apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
Techniques liées à l'apprentissage automatique / à la classification
Machine learning supervisé (classification / régression)
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
Apprentissage automatique par python (1) Classification générale
Classification et régression dans l'apprentissage automatique
SVM essayant l'apprentissage automatique avec scikit-learn
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
Développement d'applications à l'aide d'Azure Machine Learning
Apprentissage automatique
[Apprentissage automatique] Regroupez les articles Yahoo News avec le modèle de sujet MLlib (LDA).
scikit-learn Comment utiliser le résumé (apprentissage automatique)
[Apprentissage automatique] Prédiction FX à l'aide de l'arbre de décision
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
Résumé de la classification et de la mise en œuvre des algorithmes d'apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Classification EV3 x Pyrhon Machine Learning Partie 3
Classification des images de guitare par apprentissage automatique Partie 1
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
Algorithme d'apprentissage automatique (de la classification à 2 classes à la classification à plusieurs classes)
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Classer les informations liées à l'apprentissage automatique par modèle de sujet
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
Apprentissage supervisé (classification)
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn
[Memo] Apprentissage automatique
Classification des images de guitare par apprentissage automatique, partie 2
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Un mémorandum de méthode souvent utilisé dans l'apprentissage automatique utilisant scikit-learn (pour les débutants)
Exemple d'apprentissage automatique
[Apprentissage automatique] Extraire des mots similaires mécaniquement en utilisant WordNet
Raisonnement causal utilisant l'apprentissage automatique (organisation des méthodes de raisonnement causal)
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (1)
Créez des projets d'apprentissage automatique à une vitesse explosive à l'aide de modèles
[Apprentissage automatique] Comprendre la SVM à la fois à partir de scikit-learn et des mathématiques
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (3)
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Tech-Circle Commençons le développement d'applications à l'aide de l'apprentissage automatique (auto-apprentissage)
[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
L'apprentissage automatique pratique avec Scikit-Learn et TensorFlow-TensorFlow a abandonné -
Mémo de construction d'environnement d'apprentissage automatique par Python
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique