使用make_scorer

时间:2018-09-19 10:17:10

标签: python decision-tree metrics

我正在尝试创建一个指标,以优化决策树分类器中正类的“正正”的精度:

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)

我得到以下结果:

RandomSearchCV results

使用这些参数对树进行修剪,我得到的真实正值的百分比为零...

Zero percent

只需将splitter='random'更改为'best',我在积极班级的准确率就会提高到82%。

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

1 个答案:

答案 0 :(得分:0)

RandomizedSearchCV或您的得分手没有任何问题,尽管您可以将precision_score用作得分手而不是make_scorer,因为默认情况下,precision_score具有您将其设置为的参数:

网格搜索(或随机搜索)的目的是为您使用的模型找到最佳的超参数值。在这种情况下,您选择使用经典决策树。请记住,此模型非常基础。您实质上是在构建一棵树,因此重要的超参数是那些会影响树深度和分割标准的参数。

您提到,将splitter策略更改为“最佳”时,您获得了更好的准确性得分。好吧,splitter也是该模型的超参数,因此它可以作为网格搜索空间中的附加参数提供。

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

最终,这将是我的指针:

    决策树是一个非常基本的模型。容易过拟合。我建议使用整体模型,例如由多个决策树组成的随机森林。
  1. 考虑要调整的超参数,以及要在该超参数空间中进行多彻底的搜索以获取最佳模型。您应该从几个超参数开始搜索,从诸如max_depthmin_samples_split之类的重要参数开始,然后进行扩展。这将对您有利。这里没有对与错,但是要跟踪找到的最佳参数。
  2. 您应该考虑班级的平衡程度。如果一个类别比另一个类别过多,则模型往往会有很大的偏见。如果存在类不平衡,则可以使用class_weight参数来控制不平衡。