我正在尝试创建一个指标,以优化决策树分类器中正类的“正正”的精度:
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
中有什么问题?
答案 0 :(得分:0)
RandomizedSearchCV
或您的得分手没有任何问题,尽管您可以将precision_score
用作得分手而不是make_scorer
,因为默认情况下,precision_score
具有您将其设置为的参数:
网格搜索(或随机搜索)的目的是为您使用的模型找到最佳的超参数值。在这种情况下,您选择使用经典决策树。请记住,此模型非常基础。您实质上是在构建一棵树,因此重要的超参数是那些会影响树深度和分割标准的参数。
您提到,将splitter
策略更改为“最佳”时,您获得了更好的准确性得分。好吧,splitter
也是该模型的超参数,因此它可以作为网格搜索空间中的附加参数提供。
运行随机搜索后,您可能获得较低的精度得分的另一个潜在原因是,您可能没有给它足够的迭代次数来找到正确的超参数组合。
最终,这将是我的指针:
max_depth
或min_samples_split
之类的重要参数开始,然后进行扩展。这将对您有利。这里没有对与错,但是要跟踪找到的最佳参数。class_weight
参数来控制不平衡。