単純なパーセプトロンをカーネル化する方法は?


10

非線形境界の分類問題は、単純なパーセプトロンでは解決できません。次のRコードは説明のためのものであり、Python でのこのに基づいています)。

nonlin <- function(x, deriv = F) {
  if (deriv) x*(1-x)
  else 1/(1+exp(-x))
}

X <- matrix(c(-3,1,
              -2,1,
              -1,1,
               0,1,
               1,1,
               2,1,
               3,1), ncol=2, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(2,-1,1)

for (iter in 1:100000) {
  l1 <- nonlin(X %*% syn0)
  l1_error <- y - l1
  l1_delta <- l1_error * nonlin(l1,T)
  syn0 <- syn0 + t(X) %*% l1_delta
}

print("Output After Training:")
## [1] "Output After Training:"
round(l1,3)
##       [,1]
## [1,] 0.488
## [2,] 0.468
## [3,] 0.449
## [4,] 0.429
## [5,] 0.410
## [6,] 0.391
## [7,] 0.373

カーネルといわゆるカーネルトリックのアイデアは、入力空間を次のように高次元空間に投影することです(picsのソース)。

ここに画像の説明を入力してください ここに画像の説明を入力してください

私の質問与えられた分類問題を解決できるカーネルパーセプトロン
を取得するために、カーネルトリック(たとえば、単純な2次カーネル)をどのように利用しますか?注意:これは主に概念的な質問ですが、必要なコードの変更も提供できる場合、これは素晴らしいことです

これまで
に試したことで、うまくいく次のことを試しましたが、複雑な問題には計算が高すぎるため、これは本当のことではないと思います(「カーネルトリック」の背後にある「トリック」は、カーネル自体ですが、すべてのインスタンスの予測を計算する必要はありません)。

X <- matrix(c(-3,9,1,
              -2,4,1,
              -1,1,1,
               0,0,1,
               1,1,1,
               2,4,1,
               3,9,1), ncol=3, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(3,-1,1)

完全な開示
この質問を1週間前にSOに投稿しましたが、あまり注目されませんでした。ここはプログラミングの問題よりも概念的な問題なので、こちらのほうがいいと思います。

回答:


2

標準のパーセプトロンを取得し、内積を同等の(「カーネルトリック」のため)K(X 、バツ)。これは、内積がマップであり、カーネル関数。一般的なガウス動径基底関数カーネル(RBF)の場合と同様に: XX=X,X<,>:Rp×RpRk:Rp×RpR

K(xi,xj)=exp(||xixj||22σ2)

カーネルパーセプトロンのWikipediaページで述べたように、入力のサイズのサブセットを選択し、それらの線形結合を使用して出力を生成します。 M

f(x)=iMαiyiK(x,xi)

サポートベクターマシン(SVM)を見たことがあれば、まったく同じデュアルに気付くでしょう。使用するサイズのサブセットを選択するには、サンプルがソリューションのサポート/基底ベクトルであるかどうかを表すを最適化します。最適化には、元のパーセプトロン最適化の重みを含めます。Mαiiαiωi

射影を計算する必要がないという質問については、あなたの言うとおり、入力データ行列は依然として2次元です。出力の計算では、内積をカーネル関数に置き換えました。これが、特徴空間での「暗黙の」計算が行われる場所です。X



ありがとうございます-上記のコードのどの行をどのように変更する必要があるかを説明するという意味で、答えをより具体的にすることができますか?Rがわからない場合は、変更を疑似コードで記述できます。私はあなたの答えを喜んで受け入れます:-)
vonjd '12

私の意見では、あなたがあなたのコードの基にしたものへのあなたのリンクされた投稿は、パーセプトロンと逆伝播の貧弱なプレゼンテーションですが、確かに簡潔です。逆伝播の仕組みと一般的なパーセプトロン理論を知っていますか?
Kellan Fluette 2015年

まあ、ある程度まで、私は願っています。正確には何をしているのですか?2次カーネルでカーネルトリックを使用するには、上記のコードをどのように変更しますか?
vonjd 2015年

知覚基準のラグランジアン双対には$ \ vec {x} ^ \ intercal \ vec {x)$はありませんか?具体的には、内積をカーネル関数評価に置き換えます。
Kellan Fluette 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.