Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sklearn GridSearchCV与管道_Python_Scikit Learn - Fatal编程技术网

Python sklearn GridSearchCV与管道

Python sklearn GridSearchCV与管道,python,scikit-learn,Python,Scikit Learn,我不熟悉sklearn的Pipeline和GridSearchCV功能。我试图建立一个管道,首先对我的训练数据进行随机PCA,然后拟合岭回归模型。这是我的密码: pca = RandomizedPCA(1000, whiten=True) rgn = Ridge() pca_ridge = Pipeline([('pca', pca), ('ridge', rgn)]) parameters = {'ridge__alpha': 10 ** np.

我不熟悉
sklearn
Pipeline
GridSearchCV
功能。我试图建立一个管道,首先对我的训练数据进行随机PCA,然后拟合岭回归模型。这是我的密码:

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:])
我知道
RidgeCV
函数,但我想试用Pipeline和GridSearch-CV

我希望网格搜索CV报告RMSE错误,但这在sklearn中似乎不受支持,所以我正在处理MSE。但是,它的得分为负值:

In [41]: grid_search.grid_scores_
Out[41]: 
[mean: -0.02665, std: 0.00007, params: {'ridge__alpha': 1.0000000000000001e-05},
 mean: -0.02658, std: 0.00009, params: {'ridge__alpha': 0.031622776601683791},
 mean: -0.02626, std: 0.00008, params: {'ridge__alpha': 100.0}]

很明显,对于均方误差来说,这是不可能的——我做错了什么?

这些分数是负的MSE分数,也就是说,否定它们,你就得到了MSE。问题是,按照惯例,
GridSearchCV
总是试图最大化其分数,因此像MSE这样的损失函数必须被否定。

如果您想将RMSE作为一个度量,您可以编写自己的可调用/函数,该函数将采用Y_pred和Y_org并计算RMSE


假设,我已将从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))

创建
GridSearchCV
的另一种方法是使用
make_scorer
并将
越大越好
标志改为
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)

您可以在文档中看到评分


根据您的测试,您能指出有关此项或其的任何文档吗?(我个人认为应该是否定的,而不是“否定的”)我现在有点困惑。我是否必须在model.compile()中使用'neg_mean_squared_error'来表示“损失”和度量“或‘均方误差’?问题是为什么RMSE值变成负值;这似乎不是问题的答案。@Gust有一个“负根均方误差”,我想这将很容易得到正确的RMSE?@JeremyCaney谢谢你的建议,这里是到Sciket学习评分文档的链接