我有一个使用文本数据的随机森林模型。但是,当我在新数据(测试集)上尝试该模型时,训练集和测试集之间的特征数量不兼容。另外,测试集上的转换有时会出现错误:sklearn.exceptions.NotFittedError:此 ColumnTransformer 实例尚未安装。在使用此估计器之前,请使用适当的参数调用“fit”。
这是我的代码:
featurizer = ColumnTransformer(
transformers=[("vectorized_title", TfidfVectorizer(), "filtered_title"),
("vectorized_author",TfidfVectorizer(), "filtered_author"),
("vectorized_abstract",TfidfVectorizer(),"filtered_abstract"),
("encoded_publisher",OneHotEncoder(),["publisher"]),
("encoded_entrytype",OneHotEncoder(),["ENTRYTYPE"]),
],
remainder='drop')
with open('featurizer.pkl', 'wb') as featurizer_file:
pickle.dump(featurizer, featurizer_file)
X_transformed = featurizer.fit_transform(new_df)
with open('featurizer.pkl', 'rb') as featurizer_file:
loaded_featurizer = pickle.load(featurizer_file)
X_test_transformed = loaded_featurizer.transform(test_df)
y_pred = rf_model.predict(X_test_transformed)
我尝试将变换部分更改为 fit_transform (我知道这对于测试集来说是不正确的)。两个数据集中的列数和列顺序相同。训练集和测试集之间的特征名称不同。
让我们弄清楚一些事情:
NotFittedError
的原因很可能是因为您没有加载训练数据已拟合的拟合模型。OneHotEncoder
可能会看到训练集中不存在的类别。您可能想将 OneHotEncoder
的参数更改为 handle_unknown='ignore'
。通过这样做,OneHotEndoder
能够处理测试集中尚未出现在训练集中的类别。