【问题标题】:Scikit-learn: overriding a class method in a classifierScikit-learn:覆盖分类器中的类方法
【发布时间】:2015-06-10 03:44:07
【问题描述】:

我正在尝试覆盖分类器类的 predict_proba 方法。就我所拥有的seen 而言,最简单的方法是预处理基类方法的输入或后处理其输出。

class RandomForestClassifierWrapper(RandomForestClassifier):

    def predict_proba(self, X):
        pre_process(X)
        ret = super(RandomForestClassifierWrapper, self).predict_proba(X)
        return post_process(ret)

但是,我想做的是复制一个在基类方法中本地创建的变量,在方法返回时进行处理和垃圾收集。我打算处理存储在这个变量中的中间结果。有没有一种简单的方法可以做到这一点而不会弄乱base class internals

【问题讨论】:

  • 你所说的“基分类器”是什么意思?
  • 我进行了编辑以避免混淆。
  • @user36047 你想获取predict_proba() 中的哪个变量?

标签: python oop scikit-learn


【解决方案1】:

无法从外部访问方法的局部变量。由于您拥有基本分类器的代码,因此您可以做的是通过从基本分类器复制代码并根据需要处理局部变量来覆盖predict_proba 方法。

【讨论】:

  • 我先尝试了这个。当错误开始出现时,我有点困惑。
  • 您遇到了什么样的错误?请注意,您需要使用原始刚刚使用self. 的基类中的变量。
  • 如果我按照@OhAuth 的答案覆盖,第一个是 NameError: global name 'check_is_fitted' is not defined
  • 试着把它改成self.check_is_fitted('n_outputs_')
  • 我得到 AttributeError: 'RandomForestClassifierWrapper' 对象没有属性 'check_is_fitted'。 RandomForestClassifier 似乎继承自一个 ForestClassifier,它继承自 BaseForest 并覆盖其 predict_proba
【解决方案2】:

尝试覆盖:

class RandomForestClassifierWrapper(RandomForestClassifier):

    def predict_proba(self, X):
            check_is_fitted(self, 'n_outputs_')

            # Check data
            X = check_array(X, dtype=DTYPE, accept_sparse="csr")

            # Assign chunk of trees to jobs
            n_jobs, n_trees, starts = _partition_estimators(self.n_estimators,
                                                            self.n_jobs)

            # Parallel loop
            all_proba = Parallel(n_jobs=n_jobs, verbose=self.verbose,
                                 backend="threading")(

            # do something with all_proba

            return all_proba

【讨论】:

  • 我实际上首先尝试了这个。出现了一些错误:第一个是 NameError: global name 'check_is_fitted' is not defined
  • @user36047 添加from ..utils.validation import check_is_fitted文件的顶部
  • 我得到了它的工作,我会接受这个答案。我还用 sn-p 的最终工作版本编辑了答案(编辑:但是,它似乎没有通过同行评审)。谢谢。
猜你喜欢
  • 2015-05-09
  • 2014-02-25
  • 2017-02-01
  • 2014-02-04
  • 2020-02-14
  • 2013-10-05
  • 2016-05-22
  • 2014-04-27
  • 2015-07-30
相关资源
最近更新 更多