Rでstring_Kernel - RとLinuxと...

RとLinuxと...


Rでstring_Kernel

Rの備忘録

string kernel の作成 その 1 2007 08 18も参照のこと

Text Classification using String Kernels: Journal of Machine Learning Research 2 (2002) 419-444

二つのアルファベットが隣接する場合に λ2 とし,n 個離れていれば λ(n+1) と定め,これをすべてのアルファベットについて数え上げ,二つの文書間で計算するものである。

Lohdi の例からあげる. λ2 を簡単にλ^2と示す.

φ(cat) λ^2 λ^3  λ^2     0       0       0        0        0
φ(car) λ^2    0       0      0       0     λ^3    λ^2      0
φ(bat)   0      0     λ^2  λ^2   λ^3    0         0        0
φ(bar)   0      0        0    λ^2    0       0       λ^2    λ^3

ここで K(car,cat) = λ^4.つまりcarとcatの2行で,いわば論理積を求めるようなもの.(同じ次数のラムダは個数分の係数をつけておく)

さらに正規化するならば,まず K(car,car) = K(cat,cat) = 2λ^4 + λ^6 を求め

K(car,cat) = λ^4/(2λ^4 + λ^6) = 1/(2 + λ^2). 

と正規化される.

さて,これをRで実行するには kernlab パッケージを利用する.パッケージ内のstringdot()関数を使う.λはデフォルトでは 0.5 である.

test.str <- list("cat","car","bat","bar")
str.dot <- stringdot(length = 1, lambda = 0.5, 
    type = "sequence", normalized = TRUE)
list(kernelMatrix(str.dot, test.str)

test.str <- list("science is organized knowledge",
                    "wisdom is organized life")
str.kern.list <- NULL
for(i in 1:6){
  str.dot <- stringdot(length = i, lambda = 0.5, 
              type = "sequence", normalized = TRUE)
  str.kern.list[i] <- list(kernelMatrix(str.dot, test.str))
}
 
Link: Rの備忘録(1706d) R_fromOldHtml3_2(3981d)
Last-modified: 2007-12-25 (火) 08:44:24 (3891d)