二元分类目标特别关注假阳性

我在使用sklearn的模型时有点困惑,如何设置特定的优化函数?例如,当使用RandomForestClassifier时,我如何让模型“知道”我想最大化“召回率”或“F1分数”,或者“AUC”而不是“准确率”?

有什么建议吗?谢谢你。


回答:

你要找的是参数调优。基本步骤是,首先选择一个估计器,然后定义一个超参数空间(即你想要调整的所有可能的参数及其各自的值),一个交叉验证方案和评分函数。现在,根据你选择的搜索参数空间的方式,你可以选择以下方法:

详尽的网格搜索在这种方法中,sklearn使用用户定义的GridSearchCV方法创建一个包含所有可能的超参数值组合的网格。例如:

my_clf = DecisionTreeClassifier(random_state=0,class_weight='balanced')param_grid = dict(            classifier__min_samples_split=[5,7,9,11],            classifier__max_leaf_nodes =[50,60,70,80],            classifier__max_depth = [1,3,5,7,9]            )

在这种情况下,指定的网格是classifier__min_samples_split、classifier__max_leaf_nodes和classifier__max_depth的值的交叉乘积。文档中说明:

GridSearchCV实例实现了常用的估计器API:当在数据集上“拟合”时,会评估所有可能的参数值组合,并保留最佳组合。

使用GridSearch的一个例子:

#创建一个分类器 clf = LogisticRegression(random_state = 0)#对数据集进行交叉验证cv=StratifiedKFold(n_splits=n_splits).split(features,labels)#声明超参数网格param_grid = dict(            classifier__tol=[1.0,0.1,0.01,0.001],              classifier__C = np.power([10.0]*5,list(xrange(-3,2))).tolist(),              classifier__solver =['newton-cg', 'lbfgs', 'liblinear', 'sag'],             )#使用分类器、参数网格、评分函数和交叉验证的数据集执行网格搜索grid_search = GridSearchCV(clf, param_grid=param_grid, verbose=10,scoring=make_scorer(f1_score),cv=list(cv))grid_search.fit(features.values,labels.values)#要使用指定的评分函数获取最佳分数,使用以下命令print grid_search.best_score_#同样地,获取最佳估计器best_clf = grid_logistic.best_estimator_print best_clf

你可以阅读更多关于其文档的这里,了解各种内部方法等,以检索最佳参数等。

随机搜索与详尽检查超参数空间不同,sklearn实现了RandomizedSearchCV来对参数进行随机搜索。文档中说明:

RandomizedSearchCV实现了对参数的随机搜索,其中每个设置是从可能的参数值分布中抽样的。

你可以从这里阅读更多相关信息。

你可以从这里阅读更多关于其他方法的信息。

参考的替代链接:

编辑: 在你的情况下,如果你想最大化模型的召回率,你只需指定recall_score来自sklearn.metrics作为评分函数。

如果你希望如你问题中所述最大化“假阳性”,你可以参考这个回答混淆矩阵中提取“假阳性”。然后使用make_scorer函数并将其传递给GridSearchCV对象进行调优。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注