sklearn GridSearchCV with Pipeline

时间:2014-01-10 16:59:31

标签: python scikit-learn

我是sklearn的{​​{1}}和Pipeline功能的新手。我正在尝试构建一个管道,首先对我的训练数据进行RandomizedPCA,然后拟合岭回归模型。这是我的代码:

GridSearchCV

我知道pca = RandomizedPCA(1000, whiten=True) rgn = Ridge() pca_ridge = Pipeline([('pca', pca), ('ridge', rgn)]) parameters = {'ridge__alpha': 10 ** np.linspace(-5, -2, 3)} grid_search = GridSearchCV(pca_ridge, parameters, cv=2, n_jobs=1, scoring='mean_squared_error') grid_search.fit(train_x, train_y[:, 1:]) 函数,但我想尝试使用Pipeline和GridSearch CV。

我希望网格搜索CV报告RMSE错误,但是sklearn似乎不支持这种情况,因此我正在使用MSE。但是,它所反映的分数是负数:

RidgeCV

显然这对于​​均方误差是不可能的 - 我在这里做错了什么?

5 个答案:

答案 0 :(得分:36)

这些分数是负MSE分数,即否定它们并且您获得MSE。根据惯例,GridSearchCV总是试图最大化得分,因此必须否定像MSE这样的损失函数。

答案 1 :(得分:3)

创建GridSearchCV的另一种方法是使用make_scorer并将greater_is_better标志设置为False

因此,如果clf是您的分类器,而参数是您的超参数列表,则可以像这样使用make_scorer

from sklearn.metrics import make_scorer
#define your own mse and set greater_is_better=False
mse = make_scorer(mean_squared_error,greater_is_better=False)

现在,与下面相同,您可以调用GridSearch并传递您定义的mse

grid_obj = GridSearchCV(clf, parameters, cv=5,scoring=mse,n_jobs = -1, verbose=True)

答案 2 :(得分:0)

如果要获取RMSE作为度量标准,则可以编写自己的可调用/函数,该函数将使用Y_pred和Y_org并计算RMSE。

ref: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html

答案 3 :(得分:0)

假设我将从GridSearchCV获得的负MSE和负MAE的结果存储在分别名为model_nmse和model_nmae的列表中。

所以我只需将其乘以(-1)即可获得所需的MSE和MAE分数。

model_mse = list(np.multiply(model_nmse , -1))

model_mae = list(np.multiply(model_nmae , -1))

答案 4 :(得分:0)

您可以在文档中看到评分

enter image description here