[[Rの備忘録]] [[string kernel の作成 その 1 2007 08 18>R_fromOldHtml3_2#yd069bf1]]も参照のこと Text Classification using String Kernels: Journal of Machine Learning Research 2 (2002) 419-444 二つのアルファベットが隣接する場合に&mathml(\lambda^2); とし,n 個離れていれば&mathml(\lambda^(n + 1)); と定め,これをすべてのアルファベットについて数え上げ,二つの文書間で計算するものである。 Lohdi の例からあげる.&mathml(\lambda^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)) }