通过GridSearchCV获取精确模型以进行召回优化

时间:2018-02-28 17:08:28

标签: python scikit-learn grid-search

鉴于机器学习模型RBF SVC称为'm',我在gamma值上执行了gridSearchCV,以优化召回。 我想回答这个问题: “网格搜索应该找到最适合回忆的模型。这个模型的召回比精度更好?”

所以我做了gridSearchCV:

grid_values = {'gamma': [0.001, 0.01, 0.05, 0.1, 1, 10, 100]}
grid_m_re = GridSearchCV(m, param_grid = grid_values, scoring = 'recall')
grid_m_re.fit(X_train, y_train)
y_decision_fn_scores_re = grid_m_re.decision_function(X_test) 

print('Grid best parameter (max. recall): ', grid_m_re.best_params_)
print('Grid best score (recall): ', grid_m_re.best_score_)

这告诉我最好的模型是伽玛= 0.001并且召回得分为1。

我想知道如何让这个模型的精度得到这个模型的交易,因为GridSearchCV只有属性来获得它的优化。([Doc sklearn.GridSearchCV][1]

2 个答案:

答案 0 :(得分:1)

不确定是否有更简单/更直接的方法来获得此功能,但是这种方法还允许您捕获“最佳”模型以供日后使用:

首先,您的简历适合培训数据吗?

grid_m_re = GridSearchCV(m, param_grid = grid_values, scoring = 'recall')
grid_m_re.fit(X_train, y_train)

完成后,您可以提取“最佳”模型(由履历期间的得分条件确定),然后根据需要使用它:

m_best = grid_m_re.best_estimator_

以及您的具体情况:

from sklearn.metrics import precision_score

y_pred = m_best.predict(X_test)
precision_score(y_test, y_pred)

答案 1 :(得分:0)

如果你不同时优化C和伽玛,你可以轻松过度补充。

如果您在X轴上绘制带有C的SVC,在y轴上绘制伽马并将其调用为颜色you get some kind of V-Shape, see here

因此,如果您进行网格搜索,则可以同时更好地优化C和gamma。

问题在于,通常你会得到小C值的最佳结果,而在那个区域,V形有它的尖端:不是很大而且难以击中。

我最近使用过:

make a random grid of 10 points
      every point contains C, gamma, direction, speed
cut the dataset with stratifiedShuffleSplit
fit & estimate score with cross validation 

repeat:
  kill the worst two points
  the best two points spawn a kid
  move every point in its direction with just a little bit of random, 
  fit & estimate score with cross validation 
     (if a point notice it goes downward, turn around and half speed)
  until break criterion is hit

像魅力一样工作。

我使用了特征空间中的最大距离除以4作为初始速度, 方向最大随机为pi / 4

嗯,交叉验证有点贵。

Cleptocreatively inspired by this paper.

...和另一个编辑:

我在循环中使用了10到20个循环来获得完美的点数。 如果您的数据集太大而无法进行多次拟合,请为前几次培训创建一个代表性子集...