Как применить одну горячую кодировку к невидимым будущим данным в sklearn - PullRequest
0 голосов
/ 25 сентября 2019

Я работаю с данными Titanic в качестве выборочного набора, и мне попался случай использования, когда я хочу выполнить одно горячее кодирование на этапе обучения, а затем применить свою модель.После того, как это будет сделано, я планирую сохранить модель, чтобы я мог загрузить модель обратно и score невидимый набор данных.План имеет 2 .py файлов.Одним из них является train.py, который будет загружать данные, заниматься проектированием объектов, применять логистическую модель и затем save модель на диск.Второй файл score.pyscore.py я хочу сначала взять весь невидимый набор данных, загрузить модель с диска и затем оценить эти данные для генерации прогнозов.Проблема в том, что в score.py мне придется преобразовывать необработанные невидимые данные в one-hot encoded столбцы, прежде чем генерировать прогнозы.

Вот код для train.py

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression


data_set = data[['Pclass','Sex','Age','Fare','SibSp','Cabin']]
one_hot_encoded_training_predictors = pd.get_dummies(data_set)
one_hot_encoded_training_predictors.head()
X = one_hot_encoded_training_predictors
y = data['Survived']

#Train Test split---75 25 ratio
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)
logreg = LogisticRegression() 
logreg.fit(X_train, y_train)


##predicting test accuracy
y_pred = logreg.predict(X_test) #predicting the values

# Save model code here

logreg.save(..)

Мой score.py будет выглядеть как

import statements
unseen_data = pd.read_csv(..) # this is raw unseen data

model.load(..)
model.predict(unseen_data)

Теперь представьте, что у меня есть невидимый набор, который никогда не виденпо модели.Я могу загрузить обученную модель, используя logreg.load(..), но проблема, с которой я сталкиваюсь, заключается в том, как мне сначала выполнить горячее кодирование для моих сырых невидимых функций?Могу ли я также save один горячий объект кодирования для повторного использования на невидимом наборе?Я новичок в машинном обучении и могу упустить что-то очень простое, но это проблема, которую мне нужно решить.

1 Ответ

0 голосов
/ 25 сентября 2019

Если вы используете OneHotEncoder , вы можете обрабатывать неизвестные категории, установив для параметра handle_unknown значение "ignore" .Если для этого параметра задано значение «игнорировать», и во время преобразования обнаруживается неизвестная категория, то получающиеся столбцы с горячим кодированием для этой функции будут иметь все нули.В обратном преобразовании неизвестная категория будет обозначена как None.

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...