You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sklearn StackingClassifier使用predict_proba时特征丢失问题排查

问题根源分析
  1. 你的FeaturePassThroughClassifier继承了ClassifierMixin,但未重写predict_proba方法——ClassifierMixin的默认predict_proba逻辑是为标准分类器设计的:基于分类标签生成概率分布,完全不适用于你传递原始特征的需求。
  2. 当StackingClassifier设置stack_method='predict_proba'时,会调用每个基估计器的predict_proba方法:
    • 默认逻辑要求分类器必须有classes_属性,若未显式设置,它会尝试从训练数据推断,这个过程可能导致输出维度异常。
    • 即便推断出classes_,默认逻辑会把你的自定义分类器predict返回的多列特征误判为类别标签,进而生成不符合预期的输出矩阵,最终导致特征数少了1个。
  3. 而stack_method='predict'时,调用的是你正确实现的predict方法,直接返回原始特征,因此运行正常。
解决方案

修改自定义分类器,显式实现predict_proba方法并设置必要的classes_属性,让predict_proba和predict行为一致,直接返回原始特征:

import numpy as np
from sklearn.base import BaseEstimator, ClassifierMixin

class FeaturePassThroughClassifier(BaseEstimator, ClassifierMixin):
    def fit(self, X, y=None):
        self.feature_shape_ = X.shape[1]
        print(f"Fit received {X.shape[1]} features")
        # 显式设置classes_属性(适配ClassifierMixin要求,可根据实际分类任务调整)
        self.classes_ = np.unique(y) if y is not None else np.array([0, 1])
        return self
    
    def predict(self, X):
        print(f"Predict received {X.shape[1]} features")
        return X
    
    def predict_proba(self, X):
        print(f"Predict_proba received {X.shape[1]} features")
        # 直接返回原始特征,与predict保持一致
        return X
验证步骤
  1. 运行修改后的代码,检查自定义分类器predict_proba的打印语句,确认接收的特征数为230,输出维度也为230。
  2. 验证元分类器的输入特征总数:230(自定义分类器输出) + 3×n_classes(其他基分类器predict_proba的输出列数),确认符合预期。

内容的提问来源于stack exchange,提问作者Jyoti Hassanandani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:40:29