0

J'ai créé un modèle RandomForestClassification en utilisant SkLearn en utilisant 10 fonctions textuelles différentes et un ensemble d'apprentissage de 10000. Ensuite, j'ai décapé le modèle (76mb) dans l'espoir de l'utiliser pour la prédiction. Cependant, afin de produire la forêt aléatoire, j'ai utilisé LabelEncoder et OneHotEncoder pour de meilleurs résultats sur les données catégorielles/chaîne.Prédire à partir de SciKitLearn RandomForestClassification avec des données catégoriques

Maintenant, je voudrais remonter le modèle décapé et obtenir une prédiction de classification sur 1 instance. Cependant, je ne suis pas sûr de savoir comment encoder le texte sur l'instance 1 sans charger l'intégralité de la formation & ensemble de données de test CSV à nouveau et en passant par l'ensemble du processus d'encodage.

Il semble assez laborieux de charger les fichiers csv à chaque fois. Je voudrais que ça tourne 1000 fois par heure donc ça ne me semble pas juste.

Existe-t-il un moyen de coder rapidement une ligne de données en fonction du pickle ou d'une autre variable/paramètre? L'encodage nécessite-t-il toujours TOUTES les données? Si le chargement de toutes les données d'apprentissage est nécessaire pour coder une seule ligne, il serait avantageux d'encoder les données textuelles moi-même dans une base de données où chaque caractéristique affectée à une table, auto-incrémentée avec un ID numérique et une clé UNIQUE sur le champ text/categorical, puis passez cet identifiant à RandomForestClassification? Évidemment, j'aurais besoin de réaménager et décaper ce nouveau modèle, mais alors je connaîtrais exactement la représentation numérique (codée) d'une nouvelle ligne et demanderais simplement une prédiction sur ces valeurs.

Il est très probable qu'il me manque une fonctionnalité ou un malentendu SkLearn ou Python, j'ai seulement commencé il y a 3 jours. S'il vous plaît excusez ma naïveté.

+0

Vous auriez dû décaper votre objet LabelEncoder ... –

Répondre

2

En utilisant Pickle, vous devriez enregistrer votre Label et One Hot Encoder. Vous pouvez ensuite lire ceci à chaque fois et transformer facilement de nouvelles instances. Par exemple,

import cPickle as pickle 
from sklearn.externals import joblib 
from sklearn import preprocessing 

le = preprocessing.LabelEncoder() 
train_x = [0,1,2,6,'true','false'] 
le.fit_transform(train_x) 

# Save your encoding 
joblib.dump(le, '/path/to/save/model') 
# OR 
pickle.dump(le, open('/path/to/model', "wb")) 

# Load those encodings 
le = joblib.load('/path/to/save/model') 
# OR 
le = pickle.load(open('/path/to/model', "rb")) 

# Then use as normal 
new_x = [0,0,0,2,2,2,'false'] 
le.transform(new_x) 
# array([0, 0, 0, 1, 1, 1, 3])