「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

Rによるデータサイエンス(13/21)

 Rについて

をベースに学んでいく。
 今回は非線形判別分析(PP.170-178)を扱う。

14. 非線形判別分析

 線形判別関数以外の方法による判別分析を非線形判別分析と呼び、多くの方法が提案されている。
 非線形判別分析のうち、判別関数を用いるものは2次式など初等関数が多用される。

14.1 距離による判別分析

 2群判別分析を扱う。まず学習データからグループG_1,G_2の中心M_1,M_2を求め、次に未知の個体Hとグル-プの中心との距離d(M_1,H),d(M_2,H)を測り、距離が近いグループに属するものと判断する。ただし等距離の場合は判別不能である。多群に対しても適用できる。
 距離による判別分析には、データの分散を用いた\mathrm{Mahalanobis}距離が頻用される。\mathrm{Mahalanobis}距離は



\begin{aligned}
D(\boldsymbol{X},\boldsymbol{\mu})=\displaystyle{\sqrt{{}^{t}(\boldsymbol{X}-\boldsymbol{\mu})\Sigma^{-1}(\boldsymbol{X}-\boldsymbol{\mu})}}
\end{aligned}


で定義され、多変量正規分布カーネル部分に他ならない。ここで\boldsymbol{X}はデータセット\boldsymbol{\mu}はグループの中心(普通、平均ベクトル。)および\Sigma^{-1}は分散共分散行列の逆行列である。

14.2 多数決による判別分析

 k最近傍法は伝統的なパターン分類アルゴリズムである。判別すべき個体の周辺の個体で最も近いものをk個見つけ、そのk個での多数決により、所属する群を決定する。距離測度には一般的に\mathrm{Euclid}距離を用いる。

14.3 ベイズ判別法

 個体i=1,2,\cdots,nの特徴量に関する行列X=(\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_n)、目的変数のベクトルを\boldsymbol{Y}={}^{t}(y_1,y_2\cdots,y_c,\cdots,y_g)とする。個体iの特徴量ベクトルは\boldsymbol{x}_i={}^{t}(x_{i1},\cdots,x_{ip})であり、y_cは個体が属するグループのラベルである。通常g\ll nである、
 説明変数を条件、目的変数を結果だと考えた場合、条件Xの下で結果Yが起こる条件付確率P(Y|X)\mathrm{Bayes}の定理から



\begin{aligned}
P(Y|X)&=\displaystyle{\frac{P(Y)P(X|Y)}{P(X)}}\\
P(y_c|\boldsymbol{y}_j)&=\displaystyle{\frac{P(y_c)P(\boldsymbol{x}_j|y_c)}{\displaystyle{\sum_{i=1}^{g}P(y_i)P(\boldsymbol{x}_i|y_i)}}}
\end{aligned}


を得る。
 ベイジアン・アプローチによる判別分析では、学習データからP(Y|X)が最大になるよう確率モデルを求め、所属不明の\tilde{X}が所属するグループを判別する。事後確率を最大にすることは、P(Y)P(X|Y)の最大化と同値である。

14.3.1 ナイーブ・ベイズ分類器

 パッケージ\mathrm{e1071},\mathrm{klaR}などにはベイズ判別法のためにナイーブ・ベイズ分類器がある。ナイーブ・ベイズ分類器は上述した\mathrm{Bayes}の定理に、それで計算した確率から分類先を決める決定則を合わせたものである。良く用いられるのは最大事後確率(MAP)決定規則*1である。

14.4 シミュレーション

14.4.1 Mahalanobis距離による判別
#################################
### Mahalanobis距離による判別 ###
#################################

### データの準備
data(iris)

iris_train <- iris[seq(1,nrow(iris),2),]
iris_test <- iris[-seq(1,nrow(iris),2),]

# 平均ベクトル・分散共分散行列の推定
seto_mean <- apply(iris_train[1:25,-5],2,mean)
seto_var <- var(iris_train[1:25,-5])
vers_mean <- apply(iris_train[26:50,-5],2,mean)
vers_var <- var(iris_train[26:50,-5])
virg_mean <- apply(iris_train[51:75,-5],2,mean)
virg_var <- var(iris_train[51:75,-5])

# 訓練データのMahalanobis距離
D_seto <- mahalanobis(iris_train[-5], seto_mean, seto_var)
D_vers <- mahalanobis(iris_train[-5], vers_mean, vers_var)
D_virg <- mahalanobis(iris_train[-5], virg_mean, virg_var)

# テストデータのMahalanobis距離
D_seto_test <- mahalanobis(iris_test[-5], seto_mean, seto_var)
D_vers_test <- mahalanobis(iris_test[-5], vers_mean, vers_var)
D_virg_test <- mahalanobis(iris_test[-5], virg_mean, virg_var)


### テストデータの格納
df_test_result <- as.data.frame(cbind(D_seto_test,D_vers_test,D_virg_test))

df_test_result <- cbind(df_test_result,apply(df_test_result,1,function(vc){
  if(sum(vc==min(vc))==1){
    return(c("setosa","versicolor","virginica")[vc==min(vc)])
  }else{
    return(NA)
  }
}),iris_test[,5])

colnames(df_test_result)[4:5] <- c("Estimate","True")

### 正答率
tbl_est_mhlnbs <- table(df_test_result$Estimate,df_test_result$True)

num_true <- sum(diag(tbl_est_mhlnbs))/sum(tbl_est_mhlnbs) # 正答率は96%
num_error <- 1-num_true # 誤判別率は4%
14.4.2 k近傍法
###############
### k近傍法 ###
###############

library("class")

iris_knn <- knn(iris_train[,-5], iris_test[,-5], iris_train[,5], k = 5)
tbl_est_knn <- table(iris_knn,iris_test[,5])

num_true <- sum(diag(tbl_est_knn))/sum(tbl_est_knn) # 98.666...%
num_error <- 1-num_true # 1.333...%
14.4.3 ナイーブベイズ
#########################
### Naive Bayes分類器 ###
#########################

### mlbenchパッケージにあるGlassデータセットを用いる

library("e1071")
library("mlbench")

data(Glass)

df_glass <- Glass[,c(1:5,10)] # 一部変数は除外することにする

ls_m1 <- naiveBayes(Type~., data = df_glass)

vc_m1_p <- predict(ls_m1,newdata = df_glass,) # 汎化性能をチェック

tbl_est_nb <- table(vc_m1_p,df_glass$Type)

(num_true <- sum(diag(tbl_est_nb))/sum(tbl_est_nb))
(num_error <- 1-num_true)

補足 スペック情報

エディション Windows 10 Home
バージョン 20H2
プロセッサ Intel(R) Core(TM) i5-1035G4 CPU @ 1.10GHz 1.50 GHz
実装 RAM 8.00 GB
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
R バージョン 4.1.3 (March, 2022)
RStudio バージョン 2022.02.2 Build 485

*1:最も事後確率が高い仮説を採用する規則。

プライバシーポリシー お問い合わせ