- 追加された行はこの色です。
- 削除された行はこの色です。
[[Rの備忘録]]
[[string kernel の作成 その 1 2007 08 18>R_fromOldHtml3_2#yd069bf1]]も参照のこと
Text Classification using String Kernels
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
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,cat) = λ^4.つまりcarとcatの2行で,いわば論理積を求めるようなもの.(同じ次数のラムダは個数分の係数をつけておく)
さらに正規化するならば,まず K(car,car) = K(cat,cat) = 2λ4 + λ6 を求め
K(car,cat) = λ4/(2λ4 + λ6) = 1/(2 + λ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))
}