web-dev-qa-db-ja.com

パイプラインを使用したsklearn GridSearchCV

sklearnPipelineおよびGridSearchCV機能は初めてです。最初にトレーニングデータに対してRandomizedPCAを実行し、次にリッジ回帰モデルに適合するパイプラインを構築しようとしています。これが私のコードです:

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}]

明らかにこれは平均二乗誤差では不可能です-ここで何が間違っているのですか?

25
mchangun

これらのスコアは負のMSEスコアです。つまり、それらを否定すると、MSEを取得します。問題は、慣例により、GridSearchCVは常にmaximizeのスコアを試行するため、MSEのような損失関数を無効にする必要があるということです。

39
Fred Foo

RMSEをメトリックとして取得する場合は、Y_predとY_orgを使用してRMSEを計算する独自の呼び出し可能関数を作成できます。

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

負のMSEと負のMAEがGridSearchCVから取得された結果をそれぞれmodel_nmseおよびmodel_nmaeという名前のリストに保存したと仮定します。

したがって、希望のMSEとMAEスコアを取得するには、単純に(-1)で乗算します。

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

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