python - 如何获得使用 GridSearchCV 尝试的每个模型的 F1 分数和准确度?

标签 python machine-learning scikit-learn

我正在尝试获取使用 SVM 训练的每个模型的 F1 分数准确度,因此对于使用 GridSearchCV 尝试的每组参数>。我可能已经找到了如何提高准确性,但我不知道如何提高F1 Score

例如,我想要内核线性的F1和c=1e-3。然后再次对线性和 C=1e-1 进行 F1,最后对线性和 C=1C=10 进行 F1 评分。怎么办?

这是我的一些相关代码:

parameters = {'kernel':['linear'], 'C':[1e-3, 1e-1, 1, 10]}

svc = svm.SVC(cache_size=2048)
cv = StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=42)
clf = GridSearchCV(svc, parameters, cv=cv, n_jobs=8)
grid_result = clf.fit(X_train, y_train)
grid_result.cv_results_
my_dict = defaultdict(partial(np.ndarray, 0))
my_dict['params'] = grid_result.cv_results_['params']
my_dict['mean_valid_score'] = grid_result.cv_results_['mean_test_score'] # accuracy for valid dataset
my_dict['mean_train_score'] = grid_result.cv_results_['mean_train_score'] # accuracy for train

我读了GridSearchCV文档,但我找不到任何可以满足我需要的东西。

我发现cv_results_,它提供了一些信息,例如mean_valid_scoremean_train_score似乎给了我准确性<如果我理解正确的话, 尝试的每个模型的分数。但 F1 不在那里。

还有scoring这看起来很有趣,也许它符合我的要求?但我不明白如何将它用于我的问题,以及如何实际获得每个尝试模型的分数。

我还在一些论坛上找到了grid_scores_,像这样SO thread但似乎是deprecated现在,我现在在文档中找不到任何有关此内容的信息?我们如何使用它?

我想做类似 this 的事情,但针对不同的度量:准确度和 f1!

最佳答案

如果你尝试

clf = GridSearchCV(svc, parameters, scoring = ['f1','accuracy'], cv=cv, n_jobs=8)

然后像您正在做的那样访问 gridsearch.cv_results_ ,您应该会得到您正在寻找的内容。

关于python - 如何获得使用 GridSearchCV 尝试的每个模型的 F1 分数和准确度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215433/

相关文章:

python - 一个函数可以有多个名称吗?

python - 如何访问管道中包含的模型中的最佳估计器参数?

machine-learning - NEAT 和强化学习之间有什么关系?

machine-learning - 如何在svm多标签中进行文件训练和测试?

python - DBSCAN - 查找地理空间数据(坐标)的 Eps 和 MinPts 的最佳方法

python - scikit-learn MinMaxScaler 产生的结果与 NumPy 实现略有不同

python - KFold 和 ShuffleSplit CV 有什么区别?

python - Django 用空值注释字段

python - 类型错误:不支持的操作数类型为 %: 'NoneType' 和 'str'

algorithm - 如何构建最优排序函数?