擅长:python、mysql、java
<p>这真的很遗憾,sklearn的“fit”方法不允许指定要优化的性能度量。当一个人在解决分类任务时调用数据样本上的fit方法时,周围似乎没有人理解、质疑或对实际发生的事情感兴趣。</p>
<p><strong>我们(scikit learn package的用户)默默地留下了这样的建议:间接地使用交叉验证的网格搜索和适合于不平衡数据集的特定评分方法,以期偶然发现产生适当AUC或F1分数的参数/元参数集。</strong></p>
<p>但想想看:每次调用“fit”方法都会优化精度。因此,在最终效果中,如果我们的目标是最大化F1分数,GridSearchCV会给我们“所有模式中最精确的F1模型”。这不傻吗?直接优化模型参数以获得最大F1分数不是更好吗?
记住旧的好的Matlab ANNs包,在这里您可以将所需的性能指标设置为RMSE、MAE,并且在定义了梯度计算算法的情况下,可以设置任何所需的性能指标。为什么sklearn没有选择性能指标?</p>
<p>至少,为什么没有一个简单的选项可以自动分配类实例权重来解决不平衡的数据集问题?为什么我们要手动计算重量?此外,在许多机器学习书籍/文章中,我看到作者称赞sklearn的手册是很棒的,即使不是关于这个主题的最好的信息来源。不,真的吗?为什么不平衡的数据集问题(这对数据科学家来说显然非常重要)在当时的文档中甚至没有涉及?
我向sklearn的撰稿人提出这些问题,如果他们读到了这些问题。或者任何知道原因的人欢迎发表评论和澄清。</p>
<p><strong>更新</strong></p>
<p>
由于scikit学习0.17,因此有一个class_weight=“balanced”选项,您至少可以将其传递给某些分类器:
</p>
<blockquote>
<p>The “balanced” mode uses the values of y to automatically adjust
weights inversely proportional to class frequencies in the input data
as n_samples / (n_classes * np.bincount(y)).</p>
</blockquote>