simple_imputer = SimpleImputer(strategy='median')
std_scaler = StandardScaler()
pipe_num = Pipeline([('imputer', simple_imputer), ('scaler', std_scaler)])
s_imputer = SimpleImputer(strategy='constant', fill_value='unknown')
ohe_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
pipe_cat = Pipeline([('imputer', s_imputer), ('encoder', ohe_encoder)])
col_transformer = ColumnTransformer([('num_preproc', pipe_num, [x for x in features.columns if features[x].dtype!='object']),
('cat_preproc', pipe_cat, [x for x in features.columns if features[x].dtype=='object'])])
model = VotingClassifier(estimators=[
('gbc', GradientBoostingClassifier(n_estimators=10, max_depth=50000, random_state=42)),
('nb', GaussianNB()),
('rf', KNeighborsClassifier(n_neighbors=3))], voting='soft')
final_pipe = Pipeline([('preproc', col_transformer),
('model', model)])
final_pipe.fit(X_train_1, y_train_1)
preds = final_pipe.predict(X_test_1)