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

imblearn流水线同步剔除X/y异常值触发连续标签报错排查

问题解答

imblearn兼容性说明

imblearn并非仅兼容标称型分类数据,你遇到的报错和库本身的兼容性无关,是默认参数的校验逻辑导致的。

原代码错误点

FunctionSampler默认开启参数validate=True,会在执行自定义采样函数前调用分类标签校验逻辑,仅认可离散型的分类标签,遇到连续型回归标签就会抛出ValueError: Unknown label type: 'continuous'。
另外原代码中random_state=rng的rng变量未提前定义,修复校验问题后也会触发命名错误。

基于imblearn的修复方案

给FunctionSampler传入validate=False关闭默认分类标签校验,补全随机数定义即可正常运行:

import numpy as np
from imblearn import FunctionSampler
from imblearn.pipeline import make_pipeline
from sklearn.ensemble import IsolationForest
from sklearn.linear_model import LinearRegression

rng = np.random.RandomState(42)

def outlier_rejection(X, y):
    model = IsolationForest(max_samples=100, contamination=0.4, random_state=rng)
    model.fit(X)
    y_pred = model.predict(X)
    return X[y_pred == 1], y[y_pred == 1]

pipe = make_pipeline(
    FunctionSampler(func=outlier_rejection, validate=False),
    LinearRegression()
)

pipe.fit(X_train, y_train)

基于原生sklearn流水线的替代方案

sklearn 1.2及以上版本原生支持自定义采样器接入流水线,只需继承基类实现对应接口即可,无需依赖imblearn。如果使用的sklearn版本低于1.2,原生Pipeline不支持中间步骤改变样本量,建议直接使用上述imblearn修复方案。

import numpy as np
from sklearn.base import BaseEstimator, ResamplerMixin
from sklearn.ensemble import IsolationForest
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline

class IsolationForestOutlierRemover(ResamplerMixin, BaseEstimator):
    def __init__(self, max_samples=100, contamination=0.4, random_state=42):
        self.max_samples = max_samples
        self.contamination = contamination
        self.random_state = random_state

    def _fit_resample(self, X, y):
        model = IsolationForest(
            max_samples=self.max_samples,
            contamination=self.contamination,
            random_state=self.random_state
        )
        model.fit(X)
        inlier_mask = model.predict(X) == 1
        return X[inlier_mask], y[inlier_mask]

pipe = make_pipeline(
    IsolationForestOutlierRemover(),
    LinearRegression()
)

pipe.fit(X_train, y_train)

注意:异常值剔除仅在流水线fit阶段对训练集生效,不会影响预测阶段的测试集处理,避免数据泄露风险。示例中contamination=0.4会剔除40%的训练样本,实际使用请根据业务场景调整参数值。

内容的提问来源于stack exchange,提问作者Rob Zanelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:48:35