Всегда ли мне нужно сохранять копию обучающих данных, если я выполняю горячее кодирование? - PullRequest
0 голосов
/ 27 февраля 2019

Я делаю горячее кодирование для категориальных данных.Когда я тестирую, я делаю что-то вроде этого:

data.append(train_data_X)
data.append(test_data_X)
one_hot_encode(data)
model.test(data[:test_data_X.shape[0])

Мне было интересно, есть ли способ проверить мои тестовые данные, не имея доступа к моим тренировочным данным.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Ниже приведен простой подход, но он может работать не всегда (почему он не работает всегда, было объяснено после кода)

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()

#fit the encoder
enc.fit(X_train)
#transform the data
X_train_encoded = enc.transform(X_train)
#tranform test data
X_test_encoded = enc.transform(X_test)

Но есть небольшая проблема с этой методологией.Если ваши данные поезда имеют 2 уникальных значения в столбце, кодер создаст 2 фиктивных объекта.Но если ваши тестовые данные имеют 3 уникальных значения для одного и того же столбца, у нас будет дополнительный столбец, и наша модель выдаст исключение.Поэтому всегда рекомендуется объединять тестовые и обучающие данные перед использованием быстрого кодирования, а затем восстанавливать, разбивать данные обратно на тестовые и обучающие на основе индексов.

0 голосов
/ 27 февраля 2019

Обычно рекомендуется использовать функцию scikit-learn OneHotEncoder именно для того, чтобы избежать возникшей проблемы.

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(categories = "auto", handle_unknown = 'ignore')
X_train_encoded = encoder.fit_transform(X_train)
X_test_encoded = encoder.transform(X_test)

Это гарантирует, что то же самое Горячее кодирование будет реализовано длятестовый набор.Таким образом, вы можете использовать X_train_encoded для обучения вашей модели, а затем X_test_encoded для ее оценки.

...