【问题标题】:Creating a metric for True Positives with make_scorer使用 make_scorer 创建 True Positives 指标
【发布时间】:2018-09-19 10:17:10
【问题描述】:

我正在尝试创建一个指标来优化决策树分类器中正类的 True Positives 的精度:

metrica = make_scorer(precision_score, pos_label=1, greater_is_better=True, 
                      average="binary")

然后使用RandomizedSearchCV 进行超参数调优:

random_search = RandomizedSearchCV(clf, scoring= metrica, 
                                   param_distributions=param_dist, 
                                   n_iter=n_iter_search)

我得到以下结果:

使用这些参数调整树,我得到的真阳性率为零 ...

只需将splitter='random' 更改为'best',我在正类中的准确率会提高到 82%。

我的指标或RandomSearchCV 有什么问题?

【问题讨论】:

    标签: python decision-tree metrics


    【解决方案1】:

    你的RandomizedSearchCV 或你的记分员没有任何问题,尽管你可以使用precision_score 作为记分员而不是使用make_scorer,因为默认情况下,precision_score 具有你设置的参数它是:

    网格搜索(或随机搜索)的重点是为您正在使用的模型找到最佳超参数值。在本例中,您选择使用经典决策树。请记住,这个模型是非常基本的。您实际上是在构建一棵树,因此重要的超参数是影响树深度和分裂标准的超参数。

    您提到当splitter 策略更改为“最佳”时,您获得了更好的准确度分数。嗯,splitter 也恰好是模型的一个超参数,所以它可以作为网格搜索空间中的附加参数提供。

    您在运行随机搜索后可能获得低精度分数的另一个潜在原因是您可能没有给它足够的迭代来找到正确的超参数组合。

    最后,这是我的建议:

    1. 决策树是一个非常基本的模型。它容易过拟合。我建议使用集成模型,例如由多个决策树组成的随机森林。
    2. 考虑您要调整哪些超参数,以及您希望在该超参数空间中搜索的详尽程度,以获得最佳模型。你应该从几个超参数开始搜索,从max_depthmin_samples_split 之类的重要参数开始,然后按比例放大。这对您来说将是实验性的。这里没有对错,但要跟踪找到的最佳参数。
    3. 您应该考虑班级的平衡程度。如果一个类比另一个类太多,模型往往会产生很大的偏见。如果存在类不平衡,您可以使用 class_weight 参数控制不平衡。

    【讨论】:

      猜你喜欢
      • 2018-10-30
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2011-09-18
      相关资源
      最近更新 更多