No.16000 カーネルPCAで射影するとは  【カーネルPCA】 2011/12/15(Thu) 19:42

カーネルPCAで,多クラスの分類をしようとしています。
学習した,各クラスの教師ベクトルは,軸数(列数)も行数もクラスごとに異なります。
未知データを入力し,カーネル空間に写像し,教師ベクトルに正射影して射影長が一番長い(大きい)値を示したクラスに分類する,というステップを考えています。
わからないのは,未知データをどうやって識別関数に入れるのか,です。
というのも,機械学習だと教師データのサイズは固定されています。
例えば100×10の行列が教師データだとして,未知データのサイズは,それこそ未知です。
行列のタテかヨコのサイズが一致していないと行列の積は計算できないから,未知データが教師ベクトルのサイズと不一致な場合,どこでサイズの調整をして計算可能なサイズに変化させるのか疑問です。
カーネル空間に写像するときの計算でしょうか。
いろいろ調べたのですが力不足でまだ答えが見つからず困っています。ぜひ教えてください。

No.16002 Re: カーネルPCAで射影するとは  【青木繁伸】 2011/12/15(Thu) 21:03

普通,教師データは,説明変数と被説明変数を含むデータフレームとして用意し分析に供されます。予測すべき未知データは,教師データの独立変数と同じ名前を持つデータフレーム(ただし,当然ながら被説明変数は除く)として供与されるのでしょう。
教師データフレーム <- data.frame(x1, x2, x3, y)
結果 <- 分析関数(教師データフレーム)
未知データフレーム <- data.frame(x1, x2, x3)
判別 <- predict(結果, newdata=未知データフレーム)
というようなことでは?

No.16013 Re: カーネルPCAで射影するとは  【カーネルPCA】 2011/12/17(Sat) 22:47

ご返答ありがとうございました。
すみません,KPCAで考えると「教師データの独立変数」とは「教師ベクトル」,同じ名前を持つデータフレームとは,「学習したときに入力値となった変数名に,未知入力データを入れて,学習時と同じように分類する」,という理解で宜しいでしょうか。

疑問は,その未知入力データが,学習時と行列サイズが違ったときに,どうするのか,ということです。

predict 関数を調べましたが,Rを使っていないのであまり勝手がわからず念のため伺いたいのですが,predict(結果,未知入力データ)の意味は,KPCAで 考えると「(学習結果で得られた)教師ベクトル1列(1軸)ずつと,未知入力データをどうにか細工して行列サイズを学習データと合わせて計算する」という 意味でしょうか。
もしそうだとすれば,未知入力データと学習データの内積計算をするために学習時と同じサイズの行列に未知入力データを調整する方法が,どうすればいいのかわからず,そこを教えていただけるとうれしいな,と思って質問させていただきました。。。
説明がわかりにくくてすみません。

No.16016 Re: カーネルPCAで射影するとは  【青木繁伸】 2011/12/18(Sun) 12:06

google で検索すると,参考になるページがあると思いますけど?
http://mjin.doshisha.ac.jp/R/31/31.html
とか,読みましたか?読んだ上で分からないというのなら,処置なしですが。
library(kernlab)
set.seed(12345)
g <- sample(2, 150, replace=TRUE)
x <- as.matrix(iris[g==1, 1:4])
x2 <- as.matrix(iris[g==2, 1:4])
iris.kpc1<- kpca(x, kernel="rbfdot", features=2, kpar=list(sigma=0.1))
layout(matrix(1:2, 1))
plot(pcv(iris.kpc1), col=as.integer(iris[g==1, 5]))
p1 <- predict(iris.kpc1, x2)
plot(p1)
layout(1)
判別分析や回帰分析と違い,new data についての予測値は出るが,「その後の判別は自分でやってね」ということか。


No.16023 Re: カーネルPCAで射影するとは  【カーネルPCA】 2011/12/18(Sun) 20:38

上記URLはとっくに読んで,その手順で学習のステップは終えています。
わからないのは,未知データをどう学習データと同じサイズとして入力させるべきなのか,です。
Rの関数を使える環境ならそうしています。
Rのコマンドのnewdataってどういう「行列」なわけ?
学習時と違って,どんなデータかは未知だよね,それを学習データと同じサイズに区切って教師と(つまり軸と)同じ形教師ベクトル化するわけ?
それだと,学習サイズで割り切れるサイズの未知データならわかるけど,割り切れない場合がほとんどだろうし,きっとそれ以外の方法でサイズを合わせるんだろうけど,
どうするの?
というのが疑問です。

● 「統計学関連なんでもあり」の過去ログ--- 045 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る