如何修复'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
相关产品推荐
相关产品推荐

