パターン識別 (4) 正規密度に対する判別関数
今日は p.36。
2つの正規分布から生成されたサンプルを分離するための決定境界を求めてみる。ケース1共分散行列 の場合。ただし、決定境界は手計算で と求めてしまった。
白い点の集合と黒い点の集合が見事に分断されてる。ケース1の場合は直線で分離できるので線形判別関数(linear discriminant function)と呼ばれている。この直線を求めるためには正規分布の平均ベクトルと共分散行列が既知である必要がある。普通はこんな好都合なことはなくて、分布は不明、得られているのはサンプルのみってことが多い。この場合には機械学習で決定境界を学習する方法が取られる。後のお楽しみ。
Rのソースコード
# 正規密度に対する識別関数 ケース1 linear_discriminant <- function() { # mvrnormを使うため library(MASS) # カテゴリ1の分布を定義 mu1 <- c(3,6) sigma1 <- matrix(c(2,0,0,2),2,2) # 正規分布N(mu1,sigma1)に従うサンプルを生成 smp1 <- mvrnorm(100, mu1, sigma1) # カテゴリ2の分布を定義 mu2 <- c(3,-2) sigma2 <- matrix(c(2,0,0,2),2,2) # 正規分布N(mu2,sigma2)に従うサンプルを生成 smp2 <- mvrnorm(100, mu2, sigma2) # サンプルを描画 plot(smp1, xlim=c(-3,10), ylim=c(-5,10), xlab="x1", ylab="x2", main="正規密度に対する判別関数 ケース1") par(new=T) plot(smp2, xlim=c(-3,10), ylim=c(-5,10), xlab="x1", ylab="x2", pch=18) # 識別関数 p37 式(53)でg1(x)=g2(x)とおくとx2=2が得られる par(new=T) abline(h=2) }
自分でプログラムを書いてみると理解が深まる。