ディメンション(5000,26421)のデータセットでカーネルpcaを実行して、より小さいディメンション表現を取得する必要があります。構成要素の数(k)パラメータを選択するために、データの縮小と元の空間への再構成を実行し、kの異なる値に対する再構成された元のデータの平均二乗誤差を得る。Scikit-Learn GridSearchカスタムスコアリング関数
私はsklearnのgridsearch機能を見つけたので、上記のパラメータ推定に使用したいと考えています。カーネルpcaにはスコア機能がないので、カスタムスコアリング機能を実装してGridsearchに渡しました。
from sklearn.decomposition.kernel_pca import KernelPCA
from sklearn.model_selection import GridSearchCV
import numpy as np
import math
def scorer(clf, X):
Y1 = clf.inverse_transform(X)
error = math.sqrt(np.mean((X - Y1)**2))
return error
param_grid = [
{'degree': [1, 10], 'kernel': ['poly'], 'n_components': [100, 400, 100]},
{'gamma': [0.001, 0.0001], 'kernel': ['rbf'], 'n_components': [100, 400, 100]},
]
kpca = KernelPCA(fit_inverse_transform=True, n_jobs=30)
clf = GridSearchCV(estimator=kpca, param_grid=param_grid, scoring=scorer)
clf.fit(X)
しかし、それは以下のエラーが発生:
/usr/lib64/python2.7/site-packages/sklearn/metrics/pairwise.py in check_pairwise_arrays(X=array([[ 2., 2., 1., ..., 0., 0., 0.],
...., 0., 1., ..., 0., 0., 0.]], dtype=float32), Y=array([[-0.05904257, -0.02796719, 0.00919842, .... 0.00148251, -0.00311711]], dtype=float32), precomp
uted=False, dtype=<type 'numpy.float32'>)
117 "for %d indexed." %
118 (X.shape[0], X.shape[1], Y.shape[0]))
119 elif X.shape[1] != Y.shape[1]:
120 raise ValueError("Incompatible dimension for X and Y matrices: "
121 "X.shape[1] == %d while Y.shape[1] == %d" % (
--> 122 X.shape[1], Y.shape[1]))
X.shape = (1667, 26421)
Y.shape = (112, 100)
123
124 return X, Y
125
126
ValueError: Incompatible dimension for X and Y matrices: X.shape[1] == 26421 while Y.shape[1] == 100
誰かがまさに私が間違っているのかを指し示すことができますか?
最初に、PCAに[score()](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.score)関数があります。次に、カスタムスコア関数をgridSearchに渡すために['make_scorer()'](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html)を使います。 –
私はこの場合にはPCAを使用せず、スコア機能を持たないKernel PCAを使用しています。また、make_scorer関数を使って試しましたが、このアプローチはうまくいきません。 – user1683894