正如我之前的其他人指出的那样,您的测试数据中的变量应该与训练数据中的变量完全相同。
在单热编码的情况下,如果您的测试数据中有看不见的类别,您的模型不知道如何处理它们,它没有针对这些变量进行训练。在这种情况下,在数据准备期间,您应创建您在训练期间使用值为 0 的所有变量,并且您不会为看不见的类别创建新变量。
我认为您的困惑和不同数量的变量来自您用来为您进行一次性编码的函数。可能您分别在两个数据集上运行它们,它只会创建它在特定数据集中找到的变量。您可以通过使用来自 scikit-learn 的标签编码器或 onehotencoder 转换器来克服它,这将在其对象内部保存原始状态,并且在每次转换中它将重新创建完全相同的结构。
更新使用 sklearn onehotencoder:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(handle_unknown='ignore')
encoder.fit(train_categorical_data)
encoded_train=encoder.transform(train_categorical_data)
encoded_test=encoder.transform(test_categorical_data)
您可以保存编码器以供以后使用。在官方文档中查看更多信息。