J'expérimente avec un simple Naive Bayes avec Scikit-learn. Essentiellement, j'ai deux dossiers, respectivement nommés Cat A et Cat B, dont chacun se compose d'environ 1 500 fichiers texte.Tenir l'échantillon lors du chargement des données dans Scikit-Learn avec sklearn.datasets.load_files
Je chargement de ces fichiers afin de former le classificateur comme ceci:
# Declare the categories
categories = ['CatA', 'CatB']
# Load the dataset
docs_to_train = sklearn.datasets.load_files("/Users/dh/Documents/Development/Python/Test_Data", description=None, categories=categories, load_content=True, shuffle=True, encoding='utf-8', decode_error='strict', random_state=0)
Je teste le classificateur avec des chaînes courtes de texte, par exemple
docs_new = ['This is test string 1.', 'This is test string 2.', 'This is test string 3.']
X_new_counts = count_vect.transform(docs_new)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
predicted = clf.predict(X_new_tfidf)
for doc, category in zip(docs_new, predicted):
print('%r => %s' % (doc, docs_to_train.target_names[category]))
Tout fonctionne comme il se doit, mais ce que je voudrais vraiment faire est de tester le classificateur sur certaines données qui ressemble étroitement aux données de formation. Idéalement, je voudrais sculpter un échantillon dans les données que j'utilise pour former le classificateur, puis effectuer une validation croisée avec cela. Je suppose que je pourrais simplement déplacer 500 documents impairs de chacun des ensembles de données d'entraînement dans des dossiers différents, mais je me demandais s'il y avait une meilleure façon de créer l'échantillon de rétention? Le documentation ne semble pas offrir de conseils sur ce sujet.
Le code est entièrement suivi.
import sklearn
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
import numpy as np
from sklearn import datasets
from pprint import pprint
# Declare the categories
categories = ['CatA', 'CatB']
# Load the dataset
docs_to_train = sklearn.datasets.load_files("/Users/dh/Documents/Development/Python/Test_Data", description=None, categories=categories, load_content=True, shuffle=True, encoding='utf-8', decode_error='strict', random_state=0)
print len(docs_to_train.data)
# Vectorise the dataset
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(docs_to_train.data)
# Fit the estimator and transform the vector to tf-idf
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)
X_train_tf.shape
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
print X_train_tfidf.shape
clf = MultinomialNB().fit(X_train_tfidf, docs_to_train.target)
docs_new = ['I am test string 1.', 'I am test string 2', 'I am test string 3']
X_new_counts = count_vect.transform(docs_new)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
predicted = clf.predict(X_new_tfidf)
for doc, category in zip(docs_new, predicted):
print('%r => %s' % (doc, docs_to_train.target_names[category]))
Je pense que vous cherchez ceci: [ 'sklearn.model_selection.train_test_split' '] (http://scikit-learn.org/stable/modules/generated/sklearn .model_selection.train_test_split.html) – blacksite
Merci @not_a_robot, je pense que c'est peut-être juste ce que je cherche! – DanielH
Exemple complet posté ci-dessous. – blacksite