0

Я создал модель RandomForestClassification, используя Sklepn, используя 10 различных текстовых функций и набор для обучения 10000. Затем я мариновал модель (76mb) в надежде использовать ее для прогнозирования.Прогнозирование из SciKitLearn RandomForestClassification с категориальными данными

Однако, чтобы создать случайный лес, я использовал LabelEncoder и OneHotEncoder для получения наилучших результатов по категориальным/строковым данным.

Теперь я хотел бы подтянуть маринованную модель и получить классификационное предсказание по 1 экземпляру. Тем не менее, я не уверен, как закодировать текст в экземпляре 1, не загружая весь тестовый набор данных & CSV и просматривая весь процесс кодирования.

Кажется, очень сложно загружать файлы csv каждый раз. Я бы хотел, чтобы это выполнялось 1000 раз в час, поэтому мне это не кажется правильным.

Есть ли способ быстро кодировать 1 ряд данных, учитывая рассол или другую переменную/настройку? Всегда ли требуется кодирование ВСЕХ данных?

Если загрузка всех данных обучения требуется для кодирования одной строки, было бы полезно кодировать текстовые данные самостоятельно в базе данных, где каждая функция, назначенная таблице, автоматически увеличивалась с числовым идентификатором и ключом UNIQUE на текстовое/категориальное поле, затем передать этот идентификатор в RandomForestClassification? Очевидно, мне нужно будет переоборудовать и рассортировать эту новую модель, но тогда я точно знаю (закодированное) числовое представление новой строки и просто запрошу предсказание этих значений.

Очень вероятно, что у меня отсутствует функция или непонимание SkLearn или Python, я только начал работать 3 дня назад. Пожалуйста, извините мою наивность.

+0

Вы должны были мариновать свой объект LabelEncoder ... –

ответ

2

Используя Pickle, вы должны сохранить ярлык и один горячий кодировщик. Затем вы можете читать это каждый раз и легко преобразовывать новые экземпляры. Например,

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])