GridSearchCV:选定类的性能指标[不平衡数据集]
Posted
技术标签:
【中文标题】GridSearchCV:选定类的性能指标[不平衡数据集]【英文标题】:GridSearchCV: performance metrics on a selected class [unbalanced data-set] 【发布时间】:2015-10-22 02:13:48 【问题描述】:有没有办法对针对选定类的分数(例如“f1”)优化的参数值运行网格搜索,而不是所有类的默认分数?
[编辑] 假设这样一个网格搜索应该返回一组参数,使一个分数(例如,'f1'、'accuracy'、'recall')最大化,而不是所有类别的总分类。这种方法似乎很有用,例如对于高度不平衡的数据集,当尝试构建一个分类器时,该分类器在具有少量实例的类上执行合理的工作。
具有默认评分方法的 GridSearchCV 示例(此处:所有类的“f1”):
from __future__ import print_function
from sklearn.cross_validation import train_test_split
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
tuned_parameters = ['kernel': ['rbf'], 'gamma': [1e-3, 1e-4, 1e-5],
'C': [1, 50, 100, 500, 1000, 5000],
'kernel': ['linear'], 'C': [1, 100, 500, 1000, 5000]]
clf = GridSearchCV(SVC(), tuned_parameters, cv=4, scoring='f1', n_jobs=-1)
clf.fit(X_train, y_train)
print("Best parameters set found on development set:")
print()
print(clf.best_estimator_)
y_true, y_pred = y_test, clf.predict(X_test)
print(classification_report(y_true, y_pred))
如何优化参数以获得所选类的最佳性能,或在 GridSearchCV 中合并一系列 class_weight 的测试?
【问题讨论】:
【参考方案1】:是的,您需要在GridSearchCV()
中使用scoring
参数。您可以通过字符串(例如 f1)引用一些预构建的评分函数,完整列表可以在这里找到:http://scikit-learn.org/stable/modules/model_evaluation.html#common-cases-predefined-values。或者,您可以使用 sklearn.metrics.make_scorer
创建自己的自定义评分函数。
如果这还不够详细,您可以发布一个可重现的示例,我们可以将其插入一些实际代码中。
【讨论】:
【参考方案2】:需要额外参数的评分指标不属于网格搜索中预先构建的评分功能。
在这种情况下,需要的附加参数是选择必须进行评分的类
您需要从sklearn.metrics
导入make_scorer
和fbeta_score
。
make_scorer
将指标转换为可用于模型评估的可调用对象
F-beta 分数是准确率和召回率的加权调和平均值,在 1 时达到最佳值,在 0 时达到最差值
F-beta 的参数
beta:beta 1 有利于召回,beta -> 0 只考虑精确度,而 beta -> inf 只考虑召回
pos_label:指定需要打分的类(str或int,默认为1)
代码示例如下
from sklearn.metrics import make_scorer, fbeta_score
f2_score = make_scorer(fbeta_score, beta=2, pos_label=1)
clf = GridSearchCV(SVC(), tuned_parameters, cv=4, scoring=f2_score, n_jobs=-1)
【讨论】:
以上是关于GridSearchCV:选定类的性能指标[不平衡数据集]的主要内容,如果未能解决你的问题,请参考以下文章
了解 scikit-learn GridSearchCV - 参数调整和平均性能指标
如何确定 GridSearchCV 中每个评分指标的最佳参数和最佳分数
使用 sklearn xgboost gridsearchcv 的多个评分指标