2017-04-05 14 views
0

カスタムrbfカーネル機能を実装しようとしています。しかし、私は次のエラーが発生しています。私はなぜそれがデータポイントの一定量が期待されるのか分からないのですか? エラーは、このコード行で発生します。入力ディメンションのエラー

rbf_y = rbf_kernel.predict(X_test) 

コード

def myKernel(x,y): 
    pairwise_dists = squareform(pdist(x, 'euclidean')) 
    K = scip.exp(-pairwise_dists ** 2/.08 ** 2) 
    return K 

rbf_kernel = svm.SVC(kernel=myKernel, C=1).fit(X_train, Y_train.ravel()) 
rbf_y = rbf_kernel.predict(X_test) 
rbf_accuracy = accuracy_score(Y_test, rbf_y) 

エラー:カーネル

から

ValueError: X.shape[1] = 15510 should be equal to 31488, the number of samples at training time 

データの形

X_train shape: (31488, 128) 
X_test shape: (15510, 128) 
Y_train shape: (31488, 1) 
Y_test shape: (15510, 1) 

リターン形

myKernel(X_train, X_train).shape = (31488, 31488) 
+0

完全なスタックトレースを投稿してください。 –

答えて

0

カスタムカーネルkernel(X, Y)は、マトリックスXとマトリックスY間の類似度を計算する必要があり、出力は、形状[X.shape[0], Y.shape[0]]でなければなりません。あなたのカーネル関数はYを無視し、表示されているエラーにつながる形状の行列[X.shape[0], X.shape[0]]を返します。

問題を解決するには、正しい形状のカーネル行列を計算するカーネル関数を実装します。 Scikit-learnのcustom kernels documentationには、これがどのように機能するかの簡単な例があります。

特定のカーネルの場合はcdist(x, y)の代わりにsquareform(pdist(x))を試してみるとよいでしょう。

関連する問題