我创建了一个自定义分类器(虚拟分类器)。下面是定义。我还添加了一些打印语句和全局变量来捕获值
class FeaturePassThroughClassifier(ClassifierMixin):
def __init__(self):
pass
def fit(self, X, y):
global test_arr1
self.classes_ = np.unique(y)
test_arr1 = X
print("1:", X.shape)
return self
def predict(self, X):
global test_arr2
test_arr2 = X
print("2:", X.shape)
return X
def predict_proba(self, X):
global test_arr3
test_arr3 = X
print("3:", X.shape)
return X
下面是堆叠分类器定义,其中上面定义的 CustomClassifier 是基分类器之一。还有 3 个基分类器(这些是拟合估计器)。目标是按原样获取输入训练集变量(将从 CustomClassifier 中得出)+来自 base_classifier2、base_classifier3、base_classifier4 的预测。这些特征将作为元分类器的输入。
model = StackingClassifier(estimators=[
('select_features', Pipeline(steps = [("model_feature_selector", ColumnTransformer([('feature_list', 'passthrough', X_train.columns)])),
('base(dummy)_classifier1', FeaturePassThroughClassifier())])),
('base_classifier2', base_classifier2),
('base_classifier3', base_classifier3),
('base_classifier4', base_classifier4)
],
final_estimator = Pipeline(memory=None,
steps=[
('save_base_estimator_output_data', FunctionTransformer(save_base_estimator_output_data, validate=False)), ('final_model', RandomForestClassifier())
], verbose=True), passthrough = False, **stack_method = 'predict_proba'**)
Below is o/p on fitting the model. There are 230 variables:
问题是这样的:有 230 个变量,但 CustomClassifier o/p 仅显示 229 个,这很奇怪。从上面的 print 语句中我们可以清楚地看到,有 230 个变量通过 CustomClassifier 传递。
我需要使用 stack_method =“predict_proba”。我不确定这里出了什么问题。当 stack_method = "predict" 时,代码可以正常工作。