У меня есть этот конвейер, где я использую один горячий кодировщик, но иногда он не работал должным образом, потому что в некоторых случаях мой тестовый набор имеет другое количество столбцов из-за выделения по категориям, чем мой обучающий набор. По этой причине я пытаюсь изменить свой текущий конвейер на кодировщик меток, чтобы сохранить только один столбец для каждого столбца категории
def clean_data(df):
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore', sparse=False))])
numeric_features = df.select_dtypes(include=['int64', 'float64']).columns
categorical_features = df.select_dtypes(include=['object']).columns
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)])
return preprocessor.fit_transform(df)