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

使用GridSearchCV调参时遇AttributeError:Model_selection无classes_属性

问题解决:AttributeError: 'Model_selection' object has no attribute 'classes_'

错误原因

你的Model_selection包装类没有暴露内部estimator的classes_属性,而roc_auc_score通过make_scorer使用时,会尝试访问模型的classes_来确定分类的类别顺序,因此触发了这个属性不存在的错误。

解决方案

需要让Model_selection类代理内部estimator的classes_属性,有两种可行方式:

方式1:在fit方法中同步内部模型的classes_属性

修改后的Model_selection类代码:

class Model_selection(BaseEstimator):
    def __init__(self, estimator = RandomForestClassifier()):
        self.estimator = estimator
    def fit(self, X, y=None, **kwargs):
        self.estimator.fit(X, y)
        self.classes_ = self.estimator.classes_  # 新增此行,同步classes_属性
        return self
    def predict(self, X, y=None):
        return self.estimator.predict(X)
    def predict_proba(self, X):
        return self.estimator.predict_proba(X)
    def score(self, X, y):
        return self.estimator.score(X, y)

方式2:使用@property装饰器动态返回内部模型的classes_

修改后的Model_selection类代码:

class Model_selection(BaseEstimator):
    def __init__(self, estimator = RandomForestClassifier()):
        self.estimator = estimator
    def fit(self, X, y=None, **kwargs):
        self.estimator.fit(X, y)
        return self
    def predict(self, X, y=None):
        return self.estimator.predict(X)
    def predict_proba(self, X):
        return self.estimator.predict_proba(X)
    def score(self, X, y):
        return self.estimator.score(X, y)
    
    @property
    def classes_(self):
        return self.estimator.classes_

说明

两种方式都能让GridSearchCV的roc_auc评分器正确获取到类别信息,完成超参数优化计算。第一种是在fit后直接缓存属性,第二种是每次访问时动态从内部模型获取,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:45