我是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
显然这对于均方误差是不可能的 - 我在这里做错了什么?
答案 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)
您可以在文档中看到评分