При вызове метода fit_transform
моего конвейера на обучающем наборе, а затем метода преобразования на тестовом наборе конвейер обновляет свое внутреннее состояние в соответствии с тестовым набором вместо простого применения того, что было изучено на обучении набор.
Например, с учетом следующего фрейма данных:
df = pd.DataFrame({
'Sex':['female', 'male', 'male', 'male', 'female', 'female','neutral', 'male'],
'Survived':['no', 'no', 'yes', 'no', 'yes', 'no', 'yes', 'no']
})
И его разбиение на X_train, X_test, y_train, y_test:
Важно: Обратите внимание, что я делю на способ, которым только тестовый набор имеет значение «нейтральный».
X_train = df.loc[:4,'Sex']
y_train = df.loc[:4,'Survived']
X_test = df.loc[5:, 'Sex']
y_test = df.loc[5:, 'Survived']
Ниже я создал трансформатор с именем Dummifier
и вставил его в мой конвейер (здесь у конвейера есть только один метод для ради простоты):
class Dummifier(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
X_dummies = pd.get_dummies(X)
return X_dummies
my_pipe = Pipeline([
('get_dummies', Dummifier())
])
Теперь, когда я вызвал fit_transform
в моем тренировочном наборе, а затем метод преобразования в тестовом наборе, получился следующий вывод:
X_train_trans = my_pipe.fit_transform(X_train, y_train)
X_test_trans = my_pipe.transform(X_test)
Output:
female male neutral
5 1 0 0
6 0 0 1
7 0 1 0
Вопрос: Поскольку в обучающем наборе не было значения «нейтральный», почему трансформатор теперь создает столбец «нейтральный» в испытательном наборе?
Ожидаемый вывод:
Output:
female male
5 1 0
6 0 0
7 0 1
Я уже пытался использовать OneHotEncoder
из sklearn, но вывод в основном то же самое.