代码之家  ›  专栏  ›  技术社区  ›  WesternGun

H2O-带有“performance.plot()”ROC的savefig

  •  0
  • WesternGun  · 技术社区  · 6 年前

    当我使用H2O 3.19时,我想保存训练数据的性能 matplotlib.pyplot 服务器端的图形(ROC),我怎么做?

    在这里,我们可以看到的源代码 plot() 在里面 h2o/model/metrics_base.py :

    def plot(self, type="roc", server=False):
        """
        Produce the desired metric plot.
    
        :param type: the type of metric plot (currently, only ROC supported).
        :param server: if True, generate plot inline using matplotlib's "Agg" backend.
        :returns: None
        """
        # TODO: add more types (i.e. cutoffs)
        assert_is_type(type, "roc")
        # check for matplotlib. exit if absent.
        try:
            imp.find_module('matplotlib')
            import matplotlib
            if server: matplotlib.use('Agg', warn=False)
            import matplotlib.pyplot as plt
        except ImportError:
            print("matplotlib is required for this function!")
            return
    
        if type == "roc":
            plt.xlabel('False Positive Rate (FPR)')
            plt.ylabel('True Positive Rate (TPR)')
            plt.title('ROC Curve')
            plt.text(0.5, 0.5, r'AUC={0:.4f}'.format(self._metric_json["AUC"]))
            plt.plot(self.fprs, self.tprs, 'b--')
            plt.axis([0, 1, 0, 1])
            if not server: plt.show()
    

    plot(type="roc", server=False) 只是检查 matplotlib。pyplot公司 并且不返回 plt 对象,所以我无法调用 plt.savefig() .我能做什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   WesternGun    6 年前

    正如@Goyo的评论所说,您需要导入 matplotlib.pyplot 你打电话的地方 plot() 方法,您可以 savefig 那里似乎没有返回仍然是可能的,所以我猜信息是在“内部”和“外部”之间共享的,也就是说,它们是以Java方式“静态”的。


    最后,我不得不修改源代码,迫使它返回 plt 什么时候 server is True ,然后我打电话 plot(type="roc", server=True) 从外面。我认为它没有影响,因为在更改之前,默认情况下它会返回 None

    if not server: 
        plt.show()
    else:
        return plt # return to use plt.savefig