Проблема в первых двух строках.pd.get_dummies()
вернет разные столбцы для поезда и проверит, отличаются ли данные в них.
Например, если в поезде столбец имеет 3 категории, для них будет создано 3 столбца, но может случиться, что данные теста содержат только 2 категории в этом конкретном столбце, в результате чего вы получите 2 столбца.после pd.get_dummies()
.Что приведет к разному количеству столбцов.
Здесь можно сделать несколько вещей:
1) Самый простой Использовать pd.get_dummies()
для всех данных.перед поездом тест разделяют, а затем разделяют данные.Но это не рекомендуется, потому что он передает информацию о тестовых данных в модель.
2) Если вы можете использовать разрабатываемую версию scikit, используйте CategoryoricalEncoder для выполнения горячего кодирования.
3) Используйте комбинацию LabelEncoder + OneHotEncoder в текущей версии Scikit для достижения того же.См., Например, мой другой ответ .
Примечание
Также звоните только transform()
на тестовых данных, но не fit()
.Сделайте это: -
# If you call fit_transform(), the imputer will again learn the
# new mean from the test data
# Which will lead to differences and data leakage.
imp_test_X = pd.DataFrame(imputer.transform(test_X))