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

如何修复'DecisionTree'对象无'criterion'属性的错误?

修复GridSearchCV调参时'DecisionTree'无'criterion'属性的问题

问题根源

GridSearchCV在调参过程中会直接为自定义DecisionTree实例设置指定参数(比如criterion),但你的类要么未在初始化方法中声明该参数,要么未将其保存为实例属性,导致触发属性不存在的错误。

具体修复步骤

  • 修正自定义DecisionTree类的初始化方法
    确保__init__方法接收criterion参数,并将其保存为实例属性,让GridSearchCV能正确赋值。示例代码:

    class DecisionTree:
        def __init__(self, max_depth=3, criterion='variance'):
            self.max_depth = max_depth
            # 必须将criterion保存为实例属性
            self.criterion = criterion
            # 其他初始化逻辑...
    
        def fit(self, X, y):
            # 在拟合逻辑中使用self.criterion选择分裂准则
            if self.criterion == 'variance':
                # 基于方差的分裂实现
                pass
            elif self.criterion == 'mad_median':
                # 基于中位数绝对偏差的分裂实现
                pass
            # 其余拟合代码...
    
  • 对齐参数网格的键名
    确保param_grid中的参数名与DecisionTree.__init__的参数完全一致,避免拼写错误。示例:

    from sklearn.model_selection import GridSearchCV
    
    # 参数网格,criterion取值用列表更规范(集合会被自动转为无序列表)
    param_grid = {
        'max_depth': range(2, 9),
        'criterion': ['variance', 'mad_median']
    }
    
    # 初始化GridSearchCV
    reg = GridSearchCV(
        estimator=DecisionTree(),
        param_grid=param_grid,
        cv=5,
        scoring='neg_mean_squared_error'
    )
    
  • 检查类内属性覆盖问题
    排查DecisionTree类的其他方法,确保没有错误覆盖或删除self.criterion属性,所有需要使用分裂准则的逻辑都依赖self.criterion而非硬编码值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:49