from sklearn.preprocessing import OneHotEncoder columns = ["city", "plan"] train = [ ["Paris", "free"], ["Tokyo", "paid"], ["Paris", "paid"], ["London", "free"], ] validation = [["Berlin", "paid"]] encoder = OneHotEncoder(handle_unknown="ignore", sparse_output=False) encoded_train = encoder.fit_transform(train).astype(int) encoded_validation = encoder.transform(validation).astype(int) feature_names = encoder.get_feature_names_out(columns) print("Learned categories:") for name, categories in zip(columns, encoder.categories_): print(f"- {name}: {', '.join(categories)}") print() print("Encoded feature names:") print(", ".join(feature_names)) print() print("Encoded training rows:") print(encoded_train) print() print("Validation row with unseen city:") print(encoded_validation) print() print(f"Encoded shape: {encoded_train.shape[0]} rows x {encoded_train.shape[1]} columns")