Garder TFIDF résultat pour la prédiction de nouveau contenu à l'aide de Scikit pour Python
Je suis en utilisant sklearn sur Python pour faire quelques clustering. J'ai formé de 200 000 données, et le code ci-dessous fonctionne bien.
corpus = open("token_from_xml.txt")
vectorizer = CountVectorizer(decode_error="replace")
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
km = KMeans(30)
kmresult = km.fit(tfidf).predict(tfidf)
Mais quand j'ai de nouveaux tests de contenu, je tiens à le cluster à l'existence de clusters que j'avais formé. Alors je me demandais comment enregistrer IDF résultat, de sorte que je peux faire TFIDF pour les nouveaux tests de contenu et assurez-vous que les résultats du nouveau test de contenu ont la même longueur du tableau.
Merci d'avance.
Mise à JOUR
J'ai peut-être besoin pour économiser de "transformateur" ou "tfidf" variable dans un fichier(txt ou autres), si l'un d'eux contient de la formation de la FID résultat.
Mise à JOUR
Par exemple. J'ai les données d'entraînement:
["a", "b", "c"]
["a", "b", "d"]
Et ne TFIDF, le résultat contient 4 fonctions(a,b,c,d)
Quand je TEST:
["a", "c", "d"]
pour voir qui cluster(déjà fait par k-means) il appartient. TFIDF ne fera que donner le résultat avec 3 fonctions(a,c,d), de sorte que le clustering k-means va tomber. (Si je test ["a", "b", "e"]
, il peut y avoir d'autres problèmes.)
Comment fait-on pour stocker la liste des fonctionnalités pour les données de test (même plus, de le stocker dans le fichier)?
Mise à JOUR
Résolu, voir les réponses ci-dessous.
de nouveaux tests de contenu @user123
Je suppose que vous pourriez ne pas être en mesure d'ajouter de nouveaux contenus de formation précédemment formés de contenu. Vous devez vous entraîner au moins une fois avec l'ensemble des données d'entraînement, alors vous pouvez cornichon qui a formé des données, qui peut être utilisé plus tard pour éliminer la formation de retard. Mais quand vous obtenez du contenu, vous auriez à le former au moins une fois
Je vous remercie pour votre réponse. J'ai mis à jour ma question. Je ne vais pas à ajouter de nouveaux contenus de formation précédemment formés contenu, mais pour TESTER le nouveau contenu pour voir de quel groupe il appartient, qu'il sera possible?
OriginalL'auteur lol.Wen | 2015-04-22
Vous devez vous connecter pour publier un commentaire.
J'ai réussi a sauvé la liste des fonctionnalités en enregistrant
vectorizer.vocabulary_
, et la réutilisation parCountVectorizer(decode_error="replace",vocabulary=vectorizer.vocabulary_)
Codes ci-dessous:
Qui fonctionne.
tfidf
aura même fonction de la longueur formés de données.Le charger plus tard, l'article est faux !! .. Pourquoi c'est fit_transform.. Il devrait être seulement transformer, techniquement, si vous sont en train de transformer les nouvelles/invisible de données.
OriginalL'auteur lol.Wen
Si vous souhaitez sauvegarder une liste de fonctionnalités pour les données de test pour une utilisation à l'avenir, vous pouvez le faire:
tfidf
ne contient pas de liste de fonctionnalités, j'ai enregistré avec succès la liste des fonctionnalités pour la réutilisation, et a répondu à moi-même. Je vous remercie pour m'avoir inspiré.vous pouvez marquer répondu si il résolu votre problème
OriginalL'auteur user123
que vous pouvez faire à la vectorisation et tfidf transformation en une étape:
puis ajustement et de transformation sur les données d'apprentissage
et l'utilisation de la tfidf modèle de transformer
C'est le standard de l'utilisation de TfidfVectorizer .. OP avait une exigence pour la sauvegarde et rechargement de la vectorizer. Bien qu'il puisse sembler étrange, il est utile pour les personnes utilisant des services comme Amazon Sagemaker où la formation et la prédiction exécuter séparées sur des instances ec2.
OriginalL'auteur JAB
Au lieu d'utiliser le CountVectorizer pour stocker le vocabulaire, le vocabulaire de la tfidfvectorizer peut être utilisé directement.
Phase de formation:
La fit_transform fonctionne ici comme nous sommes à l'aide de l'ancien vocabulaire. Si vous n'étiez pas le stockage de la tfidf, vous avez juste utilisé de transformation sur les données de test. Même si vous faites une transformation il y a, de nouveaux documents à partir de données de test sont en train de "monter" dans le vocabulaire de la vectorizer du train. C'est exactement ce que nous faisons ici. La seule chose que nous pouvons stocker et de la réutiliser pour un tfidf vectorizer est le vocabulaire.
OriginalL'auteur Arjun Mishra
une solution plus simple, il suffit d'utiliser joblib bibliothèque comme document dit:
OriginalL'auteur GoatWang