kernlab
R パッケージを使用してサポート ベクター マシン (SVM) を実行しようとしています。私の非常に単純な例では、2 つのトレーニング データがあります。AとB。
(A と B はタイプmatrix
です。グラフの隣接行列です。)
そこで、A+B を取ってカーネル行列を生成する関数を書きました。
> km
[,1] [,2]
[1,] 14.33333 18.47368
[2,] 18.47368 38.96053
ここで、kernlab
のksvm
関数を使用して予測モデルを生成します。今のところ、私はくそったれを機能させようとしているところです - トレーニング エラーなどについては心配していません。
では、質問 1 : モデルを正しく生成していますか? 合理的に?
# y are my classes. In this case, A is in class "1" and B is in class "-1"
> y
[1] 1 -1
> model2 = ksvm(km, y, type="C-svc", kernel = "matrix");
> model2
Support Vector Machine object of class "ksvm"
SV type: C-svc (classification)
parameter : cost C = 1
[1] " Kernel matrix used as input."
Number of Support Vectors : 2
Objective Function Value : -0.1224
Training error : 0
ここまでは順調ですね。カスタム カーネル マトリックスを作成し、そのマトリックスを使用して ksvm モデルを作成しました。「1」と「-1」のラベルが付いたトレーニング データがあります。
次に予測します。
> A
[,1] [,2] [,3]
[1,] 0 1 1
[2,] 1 0 1
[3,] 0 0 0
> predict(model2, A)
Error in as.matrix(Z) : object 'Z' not found
ええとああ。これは大丈夫です。期待通りですね、本当に。「予測」は、行列ではなく、ある種のベクトルを必要とします。
それでは、いくつか試してみましょう:
> predict(model2, c(1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, c(1,1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, c(1,1,1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, c(1,1,1,1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, km)
Error in as.matrix(Z) : object 'Z' not found
上記のテストのいくつかは無意味ですが、それが私の言いたいことです。私が何をしようとも、predict() を取得して自分のデータを見て予測を行うことはできません。スカラーは機能しません。ベクトルは機能しません。2x2 マトリックスも 3x3 マトリックスも機能しません。
ここで何が間違っていますか?
(ksvm が何を望んでいるのかを理解したら、テスト データがその形式に正気/合理的/数学的に適切な方法で準拠できることを確認できます。)