我已经构建了一个模型。
est1_pre = ColumnTransformer([('catONEHOT', OneHotEncoder(dtype='int',handle_unknown='ignore'),['Var1'])],remainder='drop')est2_pre = ColumnTransformer([('BOW', TfidfVectorizer(ngram_range=(1, 3),max_features=1000),['Var2'])],remainder='drop') m1= Pipeline([('FeaturePreprocessing', est1_pre), ('clf',alternative)]) m2= Pipeline([('FeaturePreprocessing', est2_pre), ('clf',alternative)]) model_combo = StackingClassifier( estimators=[('cate',m1),('text',m2)], final_estimator=RandomForestClassifier(n_estimators=10, random_state=42) )
我可以成功地使用 m1
和 m2
进行拟合和预测。然而,当我查看组合 model_combo
时,尝试调用 .fit/.predict 会导致 ValueError: Found input variables with inconsistent numbers of samples:
model_fitted=model_combo.fit(x_train,y_train)
x_train 包含 Var1
和 Var2
。如何拟合 model_combo
?
回答:
问题在于 sklearn 的文本预处理器(在本例中为 TfidfVectorizer
)处理的是一维数据,而不是像大多数其他预处理器那样处理二维数据。因此,矢量化器将其输入视为其列的可迭代对象,所以只有一个“文档”。这可以在 ColumnTransformer
中通过指定操作的列不在列表中来修复:
est2_pre = ColumnTransformer([('BOW', TfidfVectorizer(ngram_range=(1, 3),max_features=1000),'Var2')],remainder='drop')