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

scikit-learn 0.21.3导入_deprecate_positional_args报错求助

解决ImportError: cannot import name '_deprecate_positional_args' from 'sklearn.utils.validation'

嘿,这个问题我之前也碰到过——你用的scikit-learn 0.21.3版本里根本没有_deprecate_positional_args这个函数,它是在scikit-learn 0.22及以后的版本才被添加到sklearn.utils.validation模块中的。给你两个靠谱的解决方案:

方案一:升级scikit-learn版本

这是最直接省事的办法,执行下面的命令把scikit-learn升级到至少0.22版本(建议直接升到最新的稳定版,能避免更多兼容性问题):

pip install --upgrade scikit-learn>=0.22

升级完成后,你就能正常导入这个函数了。

方案二:手动实现该函数(如果无法升级版本)

如果因为项目依赖限制不能升级scikit-learn,你可以自己在代码里实现这个装饰器的核心功能,完全能替代原函数的作用:

import warnings
import inspect

def _deprecate_positional_args(func):
    """Decorator to warn about deprecated positional arguments"""
    sig = inspect.signature(func)
    all_param_names = list(sig.parameters.keys())
    # 筛选出仅限关键字传入的参数
    kwonly_param_names = [
        name for name, param in sig.parameters.items() 
        if param.kind == inspect.Parameter.KEYWORD_ONLY
    ]
    
    def wrapper(*args, **kwargs):
        # 计算允许传入的最大位置参数数量
        max_positional_args = len(all_param_names) - len(kwonly_param_names)
        if len(args) > max_positional_args:
            # 找出被错误传入的位置参数
            deprecated_args = all_param_names[max_positional_args:max_positional_args + (len(args)-max_positional_args)]
            warnings.warn(
                f"Passing {', '.join(deprecated_args)} as positional argument(s) is deprecated. "
                "Please pass them as keyword argument(s) instead.",
                FutureWarning,
                stacklevel=2
            )
        return func(*args, **kwargs)
    return wrapper

把这段代码放在你需要使用该函数的文件顶部,之后直接用这个自定义的_deprecate_positional_args就行,不用再从sklearn导入了。

内容的提问来源于stack exchange,提问作者sahar allègue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:47:51