Это типичный вариант использования pipeline
.
Создайте рабочий процесс как единый конвейер, а затем сохраните конвейер.
Когда вы загружаете свой конвейер, вы можете напрямую получать прогнозы для новых данных без необходимости кодирования.
Также labelEncoder
не предназначены для преобразования входных данных. Как следует из названия, это для целевой переменной.
Если вам нужно преобразовать категориальную переменную в порядковые числа, используйте OrdinalEncoder
.
Пример игрушки:
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import OrdinalEncoder
from sklearn.compose import make_column_transformer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
X = [[1, 'orange', 'yes'], [1, 'apple', 'yes'],
[-1, 'orange', 'no'], [-1, 'apple', 'no']]
y = [[1], [1], [0], [0]]
X_train, X_test, y_train, y_test = train_test_split(X, y,
random_state=42)
pipe = Pipeline(
[('encoder', make_column_transformer((OrdinalEncoder(), [1, 2]),
remainder='passthrough')),
# applies OrdinalEncoder using column transformer for 2nd and 3rd column
('rf', RandomForestClassifier(n_estimators=2,random_state=42))])
pipe.fit(X_train, y_train)
import joblib
joblib.dump(pipe, 'pipe.pkl')
loaded_pipe = joblib.load('pipe.pkl')
loaded_pipe.score(X_test, y_test)