SlideShare a Scribd company logo
パターン認識モデル初歩の初歩
with R.
2018/4/16
第2事業部 市岡 岳彦
© 2018 SG Corporation 2
◍ 機械学習といっても、結局のところ、入力に対するパターンをカテゴライズし
て、分類しているという以上のものではない。
◍ 一般的にそれらに対して、どのようなモデルが考えられているか。
◍ 事後確率
◍ 距離
◍ 関数値
◍ 決定木
◍ この4つのモデルを非常に簡略化したシナリオで説明する。
◍ 本来は多次元データ分析が主となるが、一次元データとする。
◍ サンプルプログラムにはRを用いた。
はじめに
© 2018 SG Corporation 3
◍ 4つのモデルで、すべて同じシナリオを用いる。
◍ 入力データは 1次元の小数点1桁までの数値。
◍ 総データ数:6500
◍ 各データはA,B,Cのいずれかのクラスに属する。
◍ A,B,Cはそれぞれ、以下のような正規分布とする。
シナリオ
クラス 出現回数 平均 標準偏差
A 3000 3 1
B 2000 12 1
C 1500 8 1
◍ 4つのモデルで、すべて同じシナリオを用いる。
◍ A,B,Cの分布
© 2018 SG Corporation 4
シナリオ
© 2018 SG Corporation 5
◍ では、やってみよう…
シナリオ
© 2018 SG Corporation 6
◍ データの生成
シナリオ
value <- round(rnorm(3000, 3, 1), 1)
class <- 1
dataA <- data.frame(value, class)
value <- round(rnorm(2000, 12, 1), 1)
class <- 2
dataB <- data.frame(value, class)
value <- round(rnorm(1500, 8, 1), 1)
class <- 3
dataC <- data.frame(value, class)
data <- rbind(dataA, dataB, dataC)
© 2018 SG Corporation 7
◍ あらかじめ分類が分かっているデータで、データがどのクラスに分類されるか
の確率を算出しておく。
◍ ベイズの識別規則
◍ 事後確率がもっとも大きなクラスに観測データを分類する。
◍ 事前確率:P(Ci)
クラスCiの生起確率
◍ クラス条件付き確率(尤度): p(x|Ci)
クラスが与えられた下でのデータxの確率分布
◍ 周辺確率:p(x)
データxの生起確率
◍ 事後確率: P(Ci|x)
観測データxが与えられた下で、それがクラスCiに属する条件付き確率
事後確率
◍ データxとクラスCiの同時確率
𝑃(𝑥, 𝐶𝑖) = 𝑃 𝐶𝑖 𝑥 𝑝(𝑥) = 𝑝(𝑥|𝐶𝑖)𝑃(𝐶𝑖)
◍ 同時確率:P(x, Ci)
データxとクラスCiが同時に生起する確率
◍ 事前確率:P(Ci)
クラスCiの生起確率
◍ クラス条件付き確率(尤度): p(x|Ci)
クラスが与えられた下でのデータxの確率分布
◍ 周辺確率:p(x)
データxの生起確率
◍ 事後確率: P(Ci|x)
観測データxが与えられた下で、それがクラスCiに属する条件付き確率
© 2018 SG Corporation 8
事後確率
© 2018 SG Corporation 9
◍ ベイズの識別規則
◍ 事後確率の求め方
◍ データxが与えられた下で、それがクラスCiに属する確率
𝑃 𝐶𝑖 𝑥 =
𝑝(𝑥|𝐶𝑖)
𝑝(𝑥)
× 𝑃(𝐶𝑖)
◍ 事前確率:P(Ci)
クラスCiの生起確率
◍ クラス条件付き確率(尤度): p(x|Ci)
クラスが与えられた下でのデータxの確率分布
◍ 周辺確率:p(x)
データxの生起確率
事後確率
© 2018 SG Corporation 10
◍ ベイズの識別規則
◍ 事後確率の求め方
◍ 観測データxが与えられた下で、それがクラスCiに属する確率
𝑃 𝐶𝑖 𝑥 =
𝑝(𝑥|𝐶𝑖)
𝑝(𝑥)
× 𝑃(𝐶𝑖)
◍ 事前確率:P(Ci) を比: p(x|Ci) / p(x) で修正したもの。
◍ 比: p(x|Ci) / p(x) が1より大きければ、事後確率は事前確率より大きくなる。
◍ 比: p(x|Ci) / p(x) が1より小さければ、事後確率は事前確率より小さくなる。
事後確率
© 2018 SG Corporation 11
◍ 今回のシナリオの場合。
◍ 事前確率:P(A), P(B), P(C)
クラスA,B,Cの各々の出現回数/総データ数
◍ クラス条件付き確率(尤度): p(x|A), p(x|B), p(x|C)
同じ値のデータxのクラスA,B,Cでの各々の出現回数/同じ値のデータxの総数
◍ 周辺確率:p(x)
データxの出現回数/総データ数
◍ 事後確率: P(A|x), P(B|x), P(C|x)
観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率
事後確率
© 2018 SG Corporation 12
◍ では、やってみよう…
事後確率
© 2018 SG Corporation 13
𝑃 𝐶𝑖 𝑥 =
𝑝(𝑥|𝐶𝑖)
𝑝(𝑥)
× 𝑃(𝐶𝑖)
事後確率
pd <- prop.table(table(data[,2]))
pa <- pd["A"] * prop.table(table(dataA[,1]))
pb <- pd["B"] * prop.table(table(dataB[,1]))
pc <- pd["C"] * prop.table(table(dataC[,1]))
px <- prop.table(table(data[,1]))
pa <- pa / px[names(pa)]
pb <- pb / px[names(pb)]
pc <- pc / px[names(pc)]
© 2018 SG Corporation 14
◍ 事後確率: P(A|x), P(B|x), P(C|x)
観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率。
事後確率
© 2018 SG Corporation 15
◍ それっぽい、分布が得られた…
◍ 実際には
◍ 誤り率の大きな領域では判断を避ける。リジェクト。
◍ とかも必要。
事後確率
© 2018 SG Corporation 16
◍ あらかじめ分類が分かっているデータとの距離で、観測データがどのクラスに
分類されるかを決定する。
◍ 最近傍法(NN法)
◍ 観測データと分類済みデータとの類似度を距離で計算し、もっとも距離が近い
分類済みデータを持つクラスに分類する。
距離
?
© 2018 SG Corporation 17
◍ 今回のシナリオの場合。
◍ 観測データ:x
◍ 分類済みデータ:x1..3000
(A), x1..2000
(B), x1..1500
(C)
◍ 観測データから+-0.5以内の距離に、幾つ分類済みデータがあるかを数える。
◍ 離れている距離に従って、0.6^(距離*10)の重みをかける。
距離
© 2018 SG Corporation 18
◍ では、やってみよう…
距離
© 2018 SG Corporation 19
距離
dx <- 0.5
weight <- 0.6
knn <- function(x) {
d <- data[((x - dx) <= data$value) & (data$value <= (x +
dx)),]
dist <- round(abs(d$value - x), 1)
d <- table(data.frame(dist, d$class))
d <- floor(d * (weight ^ (10 * as.numeric(labels(d)$dist))))
return(d)
}
sum_knn <- function(x) {
colSums(knn(x))
}
© 2018 SG Corporation 20
距離
x <- seq(-0.5, 15.0, 0.1)
nn <- sapply(x, sum_knn)
© 2018 SG Corporation 21
◍ 観測データxから、近距離に存在するクラスA,B,Cの数。
距離
© 2018 SG Corporation 22
◍ それっぽい、分布が得られた…
◍ 実際には
◍ 同距離のクラスが同数の場合にはどうするか。
◍ 重み等のパラメータをどう決定するか。
◍ とかも必要。
距離
© 2018 SG Corporation 23
◍ あらかじめ分類が分かっているデータで、データがどのクラスに分類されるか
の識別関数の係数を算出しておく。
◍ ニューラルネットワーク
◍ 単純な線形関数と非線形の活性化関数の組み合わせで、識別関数を構成する。
関数値
© 2018 SG Corporation 24
◍ 最終的なアウトプットのイメージ。
◍ 各クラスの確率分布がわかると都合がいい。
関数値
x
© 2018 SG Corporation 25
◍ ニューラルネットワーク
関数値
入
力
層
出
力
層
© 2018 SG Corporation 26
◍ これは何をやっているのか?
関数値
© 2018 SG Corporation 27
◍ 線形関数
◍ wx + b
関数値
x
1
w1x+b1
w2x+b2
© 2018 SG Corporation 28
◍ 線形関数だけでは何層積み重ねても、線形関数になるだけ…
関数値
x
© 2018 SG Corporation 29
◍ 線形関数の後に非線形関数を挟むことにする。
◍ relu : rectified linear unit
𝑓 𝑢 = max(𝑢, 0)
関数値
x
1
f(w1x+b1)
f( w2x+b2)
© 2018 SG Corporation 30
◍ relu : rectified linear unit
◍ これにより、複雑な関数が表現可能になる。
◍ 例えば…
関数値
z11 = f(0.2x + 1)
z12 = f(x)
z21 = f(z11 - 0.5z12 + 1)
z22 = f(0.5z11 + 0.5z12 - 2)
z = z21 + 3z22 - 1.5
© 2018 SG Corporation 31
◍ softmax
◍ 事後確率: P(A|x), P(B|x), P(C|x)
観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率
◍ 最終結果を事後確率として解釈したい。
◍ 線形関数とreluの組み合わせだけでは、負の値や絶対値の大きな値が発生して
しまう。
◍ 関数の値域を0〜1の範囲に収める。
◍ 全クラスについての和を取ると、1になるように正規化する。
関数値
© 2018 SG Corporation 32
関数値
◍ softmax
◍ 出力層のk番目のユニットの出力値
◍ K : クラスの種類数
𝑝 𝐶 𝑘|𝑥 = 𝑦 𝑘 ≡
exp(𝑢 𝑘)
𝑗=1
𝐾
exp(𝑢𝑗)
◍ 事後確率がもっとも大きなクラスに観測データを分類する。
© 2018 SG Corporation 33
◍ ニューラルネットワーク
◍ とりあえず、わかった。
関数値
入
力
層
出
力
層
© 2018 SG Corporation 34
◍ では、線形関数の係数をどうやって決めるか。
◍ wx + b
関数値
x
1
w1x+b1
w2x+b2
© 2018 SG Corporation 35
◍ あらかじめ分類が分かっているデータで、データがどのクラスに分類されるか
の識別関数の係数を算出しておく。
◍ 基本的なアイデア
◍ 適当な初期値の係数で実際に学習データを読み込ませて、出力値と正解値を比
較する。
◍ 出力値と正解値の誤差が少なくなる方向に徐々に係数を更新して、計算を繰り
返す。
◍ いわゆる、教師あり学習。
関数値
© 2018 SG Corporation 36
◍ 損失関数(誤差関数)
◍ 出力値と正解値の近さの尺度
関数値
出
力
層
正
解
値
0.6
0.1
0.3
1
0
0
© 2018 SG Corporation 37
◍ 損失関数(誤差関数)
◍ 出力値と正解値の近さの尺度
◍ 目標出力
◍ クラス数が3で正解値がクラス1の場合:d = [1 0 0]
関数値
出
力
層
正
解
値
0.6
0.1
0.3
1
0
0
© 2018 SG Corporation 38
関数値
◍ 損失関数(誤差関数)
◍ 出力値と正解値の近さの尺度
◍ 尤度(n:学習データの番号、k:クラスの番号)
𝑝 𝐶 𝑘|𝑥 = 𝑦 𝑘
𝑝 d x =
𝑘=1
𝐾
𝑝 𝐶 𝑘|x 𝑑 𝑘
◍ N個の学習データについて
𝑛=1
𝑁
𝑝 d 𝑛 x 𝑛;w =
𝑛=1
𝑁
𝑘=1
𝐾
(𝑦 𝑘(x;w)) 𝑑 𝑛𝑘
© 2018 SG Corporation 39
◍ 尤度は何を表しているのか。
◍ N個の学習データについて
◍ 0.4 x 0.5 x 0.6 x…
◍ 0.99 x 0.98 x 0.95 x…
◍ 1 x 1 x 1 x…
◍ 尤度が大きいほど、より目標出力との違いがなくなる。
◍ 尤度が最大になるような方向を目標とする。
関数値
© 2018 SG Corporation 40
◍ 尤度のままでは、使いにくいので…
𝑛=1
𝑁
𝑘=1
𝐾
(𝑦 𝑘(x;w)) 𝑑 𝑛𝑘
◍ 対数をとって、符号を反転しておく。
◍ 交差エントロピー
𝐸 𝐰 = −
𝑛=1
𝑁
𝑘=1
𝐾
𝑑 𝑛𝑘log(𝑦 𝑘(x 𝑛; w))
◍ 交差エントロピーが最小になるような方向を目標とする。
関数値
© 2018 SG Corporation 41
◍ では、損失関数をどうやって最小値に近づけるか。
◍ 勾配降下法
◍ 単純に一次微分値を見て、交差エントロピーが小さくなる方向に係数を動かす。
∇𝐸 𝐰 =
𝜕𝐸 𝐰
𝜕𝐰
関数値
◍ 補足
◍ 合成関数の微分
𝑦 = 𝑓 𝑥 , 𝑧 = 𝑔 𝑦
𝑑𝑧
𝑑𝑥
=
𝑑𝑧
𝑑𝑦
𝑑𝑦
𝑑𝑥
𝑦1 = 𝑓1 𝑥 , … , 𝑦𝑛 = 𝑓𝑛 𝑥 , 𝑧 = 𝑔 𝑦1, … , 𝑦𝑛
𝜕𝑧
𝜕𝑥
=
𝑘=1
𝑛
𝜕𝑧
𝜕𝑦 𝑘
𝜕𝑦 𝑘
𝜕𝑥
© 2018 SG Corporation 42
関数値
◍ バックプロパゲーション
◍ 記号を分解しておく。
𝑢1 = 𝑤1 𝑥 + 𝑏1
𝑧1 = 𝑓(𝑢1)
© 2018 SG Corporation 43
関数値
x
1
f(w1x+b1)
f( w2x+b2)
© 2018 SG Corporation 44
◍ バックプロパゲーション
𝜕𝐸 𝑛
𝜕𝑤𝑗𝑖
(𝑙)
=
𝜕𝐸 𝑛
𝜕𝑢𝑗
(𝑙)
𝜕𝑢𝑗
(𝑙)
𝜕𝑤𝑗𝑖
(𝑙)
関数値
i
𝑢𝑗
(𝑙)
k
𝑙 − 1 𝑙 𝑙 + 1
𝑤𝑗𝑖
(𝑙)
© 2018 SG Corporation 45
◍ バックプロパゲーション
𝜕𝐸 𝑛
𝜕𝑤𝑗𝑖
(𝑙)
=
𝜕𝐸 𝑛
𝜕𝑢𝑗
(𝑙)
𝜕𝑢𝑗
(𝑙)
𝜕𝑤𝑗𝑖
(𝑙)
関数値
i
𝑢𝑗
(𝑙)
k
𝑙 − 1 𝑙 𝑙 + 1
𝑤𝑗𝑖
(𝑙)
◍ バックプロパゲーション
𝛿𝑗
(𝑙)
≡
𝜕𝐸 𝑛
𝜕𝑢𝑗
𝑙
=
𝑘
𝜕𝐸 𝑛
𝜕𝑢 𝑘
𝑙+1
𝜕𝑢 𝑘
𝑙+1
𝜕𝑢𝑗
𝑙
=
𝑘
𝛿 𝑘
𝑙+1
(𝑤 𝑘𝑗
(𝑙+1)
𝑓′(𝑢𝑗
(𝑙)
))
© 2018 SG Corporation 46
関数値
i
𝑢𝑗
(𝑙)
𝑢 𝑘−1
(𝑙+1)
𝑢 𝑘
(𝑙+1)
𝑢 𝑘+1
(𝑙+1)
𝑙 − 1 𝑙 𝑙 + 1
𝑤𝑗𝑖
(𝑙)
© 2018 SG Corporation 47
◍ バックプロパゲーション
𝜕𝐸 𝑛
𝜕𝑤𝑗𝑖
(𝑙)
=
𝜕𝐸 𝑛
𝜕𝑢𝑗
(𝑙)
𝜕𝑢𝑗
(𝑙)
𝜕𝑤𝑗𝑖
(𝑙)
関数値
i
𝑢𝑗
(𝑙)
k
𝑙 − 1 𝑙 𝑙 + 1
𝑤𝑗𝑖
(𝑙)
◍ バックプロパゲーション
𝑧1 = 𝑓(𝑢1)
𝑢2 = 𝑤2 𝑧1 + 𝑏2
𝜕𝑢𝑗
(𝑙)
𝜕𝑤𝑗𝑖
(𝑙)
= 𝑧𝑖
(𝑙−1)
© 2018 SG Corporation 48
関数値
x
1
f(w1x+b1)
f( w2x+b2)
© 2018 SG Corporation 49
◍ バックプロパゲーション
◍ 一次微分の一般形
𝜕𝐸 𝑛
𝜕𝑤𝑗𝑖
(𝑙)
= 𝛿𝑗
(𝑙)
𝑧𝑖
(𝑙−1)
関数値
入
力
層
出
力
層
◍ バックプロパゲーション
◍ 出力層(softmax)
𝑦 𝑘 ≡
exp(𝑢 𝑘)
𝑗=1
𝐾
exp(𝑢𝑗)
𝛿𝑗
(𝐿)
=
𝜕𝐸 𝑛
𝜕𝑢𝑗
(𝐿)
= −
𝑘
𝑑 𝑘
1
𝑦 𝑘
𝜕𝑦 𝑘
𝜕𝑢𝑗
(𝐿)
= −𝑑𝑗(1 − 𝑦𝑗) −
𝑘≠𝑗
𝑑 𝑘(−𝑦𝑗)
=
𝑘
𝑑 𝑘(𝑦𝑗 − 𝑑𝑗)
= 𝑦𝑗 − 𝑑𝑗
© 2018 SG Corporation 50
関数値
◍ 補足
◍ 指数関数の合成関数の微分
𝑦 =
exp(𝑥)
𝑛 + exp(𝑥)
𝑑𝑦
𝑑𝑥
=
exp(𝑥)
𝑛 + exp(𝑥)
−
exp(𝑥)
𝑛 + exp(𝑥)
2
𝑦 =
𝑚
𝑛 + exp(𝑥)
𝑑𝑦
𝑑𝑥
= −
𝑚 exp 𝑥
𝑛 + exp(𝑥) 2
© 2018 SG Corporation 51
関数値
© 2018 SG Corporation 52
◍ 以上をまとめると…
◍ アルゴリズム
◍ 順伝搬
𝐔 𝒍
= 𝐖(𝑙)
𝐙(𝑙−1)
+ 𝐛(𝑙)
𝟏 𝑁
T
𝐙 𝑙 = 𝑓(𝑙)(𝐔(𝑙))
◍ 逆伝搬
∆(𝑙)= 𝑓(𝑙)′(𝐔(𝑙))⨀(𝐖 𝑙+1 T∆(𝑙+1))
◍ 更新
𝐖(𝑙) ← 𝐖 𝑙 − 𝜖
1
𝑁
∆(𝑙) 𝐙 𝑙−1 T
𝐛(𝑙) ← 𝐛 𝑙 − 𝜖
1
𝑁
∆(𝑙) 𝟏 𝑁
関数値
© 2018 SG Corporation 53
◍ 今回のシナリオの場合
◍ ネットワーク: 3x3x3
◍ ミニバッチサイズ: 100
関数値
入
力
出
力
© 2018 SG Corporation 54
◍ では、やってみよう…
関数値
◍ 基本的な関数
© 2018 SG Corporation 55
関数値
relu <- function(x) ifelse(x >= 0, x, 0)
drelu <- function(x) ifelse(x >= 0, 1, 0)
dclass <- function(c, size) {
d <- rep(0, size)
d[c] <- 1
d
}
softmax <- function(y) {
y <- exp(y)
y <- y / colSums(y)
}
centropy <- function(s, d) {
-sum(d * log(s))
}
◍ ネットワークモデル(1/2)
© 2018 SG Corporation 56
関数値
network_model <- function(bat_size=100) {
z1 <- matrix(1, nrow=1, ncol=bat_size)
z2 <- matrix(0, nrow=3, ncol=bat_size)
z3 <- matrix(0, nrow=3, ncol=bat_size)
z4 <- matrix(0, nrow=3, ncol=bat_size)
z <- list(z1, z2, z3, z4)
b1 <- rep(1, bat_size)
b0 <- t(b1)
u1 <- matrix(0, nrow=3, ncol=bat_size)
u2 <- matrix(0, nrow=3, ncol=bat_size)
u3 <- matrix(0, nrow=3, ncol=bat_size)
u <- list(u1, u2, u3)
d <- matrix(rep(c(1,0,0), bat_size), nrow=3, ncol=bat_size)
…
◍ ネットワークモデル(2/2)
© 2018 SG Corporation 57
関数値
…
# coefficient.
w1 <- matrix(c(0.5, 0.5, 0.5), nrow=3, ncol=1)
w2 <- matrix(c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5), nrow=3, ncol=3)
w3 <- matrix(c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5), nrow=3, ncol=3)
w <- list(w1, w2, w3)
b <- list(rep(1,3), rep(1,3), rep(1,3))
# function.
f <- list(relu, relu, softmax)
df <- list(drelu, drelu)
delta1 <- matrix(1, nrow=3, ncol=bat_size)
delta2 <- matrix(1, nrow=3, ncol=bat_size)
delta3 <- matrix(1, nrow=3, ncol=bat_size)
delta <- list(delta1, delta2, delta3)
return(list(z=z, b0=b0, b1=b1, u=u, d=d, w=w, b=b, f=f, df=df, delta=delta))
}
◍ 学習(1/4)
© 2018 SG Corporation 58
関数値
id <- sample(1:6500)
data <- data.frame(id, data)
data <- data[order(data$id),]
data <- data.frame(value=data$value, class=data$class)
nm <- network_model()
eps <- sqrt(.Machine$double.eps) * 1000
◍ 学習(2/4)
© 2018 SG Corporation 59
関数値
# mini batch.
mini_batch <- function(data, bat_size=100) {
layer <- length(nm$u)
for (main_loop in 1:10000) {
for (n in 1:65) {
i <- (n - 1) * bat_size + 1
nm$z[[1]] <- t(data[i:(i + bat_size - 1), 1])
nm$d <- sapply(data[i:(i + bat_size - 1), 2], dclass, 3)
# forward.
for (i in 1:layer) {
nm$u[[i]] <- nm$w[[i]] %*% (nm$z)[[i]] + nm$b[[i]] %*% nm$b0
nm$z[[i+1]] <- nm$f[[i]](nm$u[[i]])
}
…
◍ 学習(3/4)
© 2018 SG Corporation 60
関数値
…
# backward.
nm$delta[[layer]] <- nm$z[[layer+1]] - nm$d
for (i in 1:(layer-1)) {
nm$delta[[i]] <- nm$df[[i]](nm$u[[i]]) * (nm$w[[i+1]] %*% nm$delta[[i+1]])
}
for (i in 1:layer) {
nm$w[[i]] <- nm$w[[i]] - eps * (nm$delta[[i]] %*% t(nm$z[[i]]) / bat_size)
nm$b[[i]] <- nm$b[[i]] - eps * (nm$delta[[i]] %*% nm$b1 / bat_size)
}
}
}
}
◍ 学習(4/4)
© 2018 SG Corporation 61
関数値
mini_batch(data)
© 2018 SG Corporation 62
◍ 学習済みニューラルネットワークの係数を使ったsoftmax。
関数値
© 2018 SG Corporation 63
◍ それっぽい、関数が得られた…
◍ 実際には
◍ 係数の発散を抑える。
◍ 局所解に陥らないようにする。
◍ とかも必要。
関数値
© 2018 SG Corporation 64
◍ 1つの特徴軸の1つの分割点のみで、分割することを繰り返す。
◍ どの分割点で分割するかは、不純度と呼ばれる評価関数で決定する。
◍ 分割された領域に、1クラスしか存在しないと判定した時点で、分割を終了す
る。
決定木
x < s0
x < s1
A C
B
yes no
yes no
◍ ジニ係数
◍ ノードtにおける誤り率
ℐ(𝑡) ≡
𝑖=𝑗
𝐾
𝑖≠𝑗
𝑃 𝐶𝑖|𝑡 𝑃(𝐶𝑗|𝑡)
=
𝑖=1
𝐾
𝑃(𝐶𝑖|𝑡)
2
−
𝑖=1
𝐾
𝑃2
(𝐶𝑖|𝑡)
= 1 −
𝑖=1
𝐾
𝑃2(𝐶𝑖|𝑡)
=
𝑖=1
𝐾
𝑃(𝐶𝑖|𝑡) 1 − 𝑃(𝐶𝑖|𝑡)
© 2018 SG Corporation 65
決定木
◍ ジニ係数
◍ すべてのクラスが等しく分配されていれば、1に近づく。
◍ 1種類のクラスのみが分配されていれば、0になる。
© 2018 SG Corporation 66
決定木
◍ 不純度の減り方がもっとも大きくなる点sで分割する。
◍ ノードtの不純度から分割後の不純度を引く。
∆ℐ 𝑠, 𝑡 = ℐ 𝑡 − 𝑝 𝐿ℐ 𝑡 𝐿 + 𝑝 𝑅ℐ 𝑡 𝑅
𝑝 𝐿 =
𝑝(𝑡 𝐿)
𝑝(𝑡)
𝑝 𝑅 =
𝑝(𝑡 𝑅)
𝑝(𝑡)
© 2018 SG Corporation 67
決定木
© 2018 SG Corporation 68
◍ 今回のケース
◍ 成分は1次元のみ。
◍ クラスは3種類。
決定木
© 2018 SG Corporation 69
◍ では、やってみよう…
決定木
◍ 基本的な関数
© 2018 SG Corporation 70
決定木
gini <- function(t) {
p <- table(t[,2])
p <- p / length(t[,2])
sum(p * (1 - p))
}
sgini <- function(s, t) {
tl <- t[t$value < s,]
pl <- gini(tl)
tr <- t[t$value >= s,]
pr <- gini(tr)
pl * length(tl) / length(t) + pr * length(tr) / length(t)
}
◍ 実行
© 2018 SG Corporation 71
決定木
px <- gini(data)
x <- seq(-1.0, 15.0, 0.1)
g0 <- px - sapply(x, sgini, data)
© 2018 SG Corporation 72
◍ 不純度の減り方 1つ目 : 10.2
決定木
© 2018 SG Corporation 73
◍ 不純度の減り方 2つ目(左) : 5.8
決定木
© 2018 SG Corporation 74
◍ 事後確率: P(A|x), P(B|x), P(C|x)
観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率。
事後確率(再掲)
© 2018 SG Corporation 75
◍ それっぽい、分割点が得られた…
◍ 実際には
◍ いつ分割をやめるかの判定。
◍ 複雑になりすぎた枝を刈り取る。
◍ とかも必要。
決定木
© 2018 SG Corporation 76
◍ 事後確率
◍ 学習データから事前確率、周辺確率、尤度から事後確率を算出する。
◍ 事後確率がもっとも高いクラスに分類する。
◍ 距離
◍ 学習データと入力データの距離を算出する。
◍ 学習データとの距離がもっとも近いクラスに分類する。
◍ 関数値
◍ 学習データからの関数の係数を決定する。
◍ 入力データに関数を適用し、出力値により、クラスを分類する。
◍ 決定木
◍ 学習データから、分割点を決定し、決定木を作成する。
◍ 入力データに決定木を適用し、クラスを分類する。
まとめ
© 2018 SG Corporation 77
◍ はじめてのパターン認識
◍ 平井 有三(著)
◍ 森北出版
◍ 深層学習(機械学習プロフェッショナルシリーズ)
◍ 岡谷貴之(著)
◍ 講談社サイエンティフィク
◍ アート・オブ・Rプログラミング
◍ Norman Matloff(著)、大橋真也(監訳)、木下哲也(訳)
◍ オライリー・ジャパン
参考文献
© 2018 SG Corporation 78
顧客と社員に信頼されるエス・ジー

More Related Content

What's hot

Learning Continuous Control Policies by Stochastic Value Gradients
Learning Continuous Control Policies by Stochastic Value GradientsLearning Continuous Control Policies by Stochastic Value Gradients
Learning Continuous Control Policies by Stochastic Value Gradients
mooopan
 
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical SearchWSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
sleepy_yoshi
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
Chika Inoshita
 
An introduction to statistical learning 4 logistic regression manu
An introduction to statistical learning 4 logistic regression manuAn introduction to statistical learning 4 logistic regression manu
An introduction to statistical learning 4 logistic regression manu
Hideyuki Takahashi
 
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
Deep Learning JP
 
深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて
ryosuke-kojima
 
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII
 
Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Sparse estimation tutorial 2014
Sparse estimation tutorial 2014
Taiji Suzuki
 
データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半Shinya Akiba
 
Risk based portfolio with large dynamic covariance matrices
Risk based portfolio with large dynamic covariance matricesRisk based portfolio with large dynamic covariance matrices
Risk based portfolio with large dynamic covariance matrices
Kei Nakagawa
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
 
【論文紹介】PGQ: Combining Policy Gradient And Q-learning
【論文紹介】PGQ: Combining Policy Gradient And Q-learning【論文紹介】PGQ: Combining Policy Gradient And Q-learning
【論文紹介】PGQ: Combining Policy Gradient And Q-learning
Sotetsu KOYAMADA(小山田創哲)
 
能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)
能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)
能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)
Hiroshi Kajino
 
パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムMiyoshi Yuya
 
能動学習による多関係データセットの構築
能動学習による多関係データセットの構築能動学習による多関係データセットの構築
能動学習による多関係データセットの構築
Hiroshi Kajino
 
Large scale gan training for high fidelity natural
Large scale gan training for high fidelity naturalLarge scale gan training for high fidelity natural
Large scale gan training for high fidelity natural
KCS Keio Computer Society
 
行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術
Yoshihiro Mizoguchi
 
みどりぼん読書会 第4章
みどりぼん読書会 第4章みどりぼん読書会 第4章
みどりぼん読書会 第4章
Masanori Takano
 

What's hot (20)

Learning Continuous Control Policies by Stochastic Value Gradients
Learning Continuous Control Policies by Stochastic Value GradientsLearning Continuous Control Policies by Stochastic Value Gradients
Learning Continuous Control Policies by Stochastic Value Gradients
 
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical SearchWSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
 
An introduction to statistical learning 4 logistic regression manu
An introduction to statistical learning 4 logistic regression manuAn introduction to statistical learning 4 logistic regression manu
An introduction to statistical learning 4 logistic regression manu
 
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
 
深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて
 
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Sparse estimation tutorial 2014
Sparse estimation tutorial 2014
 
データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半
 
Risk based portfolio with large dynamic covariance matrices
Risk based portfolio with large dynamic covariance matricesRisk based portfolio with large dynamic covariance matrices
Risk based portfolio with large dynamic covariance matrices
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
 
【論文紹介】PGQ: Combining Policy Gradient And Q-learning
【論文紹介】PGQ: Combining Policy Gradient And Q-learning【論文紹介】PGQ: Combining Policy Gradient And Q-learning
【論文紹介】PGQ: Combining Policy Gradient And Q-learning
 
能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)
能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)
能動学習による多関係データセットの構築(IBIS2015 博士課程招待講演)
 
パターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズムパターン認識 第12章 正則化とパス追跡アルゴリズム
パターン認識 第12章 正則化とパス追跡アルゴリズム
 
能動学習による多関係データセットの構築
能動学習による多関係データセットの構築能動学習による多関係データセットの構築
能動学習による多関係データセットの構築
 
Large scale gan training for high fidelity natural
Large scale gan training for high fidelity naturalLarge scale gan training for high fidelity natural
Large scale gan training for high fidelity natural
 
行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術行列計算を利用したデータ解析技術
行列計算を利用したデータ解析技術
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
みどりぼん読書会 第4章
みどりぼん読書会 第4章みどりぼん読書会 第4章
みどりぼん読書会 第4章
 

Similar to パターン認識モデル初歩の初歩

ディープラーニング入門 ~ 画像処理・自然言語処理について ~
ディープラーニング入門 ~ 画像処理・自然言語処理について ~ディープラーニング入門 ~ 画像処理・自然言語処理について ~
ディープラーニング入門 ~ 画像処理・自然言語処理について ~
Kensuke Otsuki
 
PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論
Akihiro Nitta
 
20200704 bsp net
20200704 bsp net20200704 bsp net
20200704 bsp net
Takuya Minagawa
 
2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)
Takuya Minagawa
 
NN, CNN, and Image Analysis
NN, CNN, and Image AnalysisNN, CNN, and Image Analysis
NN, CNN, and Image Analysis
Yuki Shimada
 
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
koba cky
 
How good is my GAN?
How good is my GAN?How good is my GAN?
How good is my GAN?
Shunsuke NAKATSUKA
 
(文献紹介)深層学習による動被写体ロバストなカメラの動き推定
(文献紹介)深層学習による動被写体ロバストなカメラの動き推定(文献紹介)深層学習による動被写体ロバストなカメラの動き推定
(文献紹介)深層学習による動被写体ロバストなカメラの動き推定
Morpho, Inc.
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
 
公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論
Kazuto Fukuchi
 
ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章
Isao Takaesu
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
Yohei Sato
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333Issei Kurahashi
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
wada, kazumi
 
データ解析13 線形判別分析
データ解析13 線形判別分析データ解析13 線形判別分析
データ解析13 線形判別分析
Hirotaka Hachiya
 
Long short-term memory (LSTM)
Long short-term memory (LSTM)Long short-term memory (LSTM)
Long short-term memory (LSTM)
Kenta Ishii
 
ベイズ統計によるデータ解析
ベイズ統計によるデータ解析ベイズ統計によるデータ解析
ベイズ統計によるデータ解析
Kunihiro Hisatsune
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
Wataru Shito
 
MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出JAVA DM
 

Similar to パターン認識モデル初歩の初歩 (20)

ディープラーニング入門 ~ 画像処理・自然言語処理について ~
ディープラーニング入門 ~ 画像処理・自然言語処理について ~ディープラーニング入門 ~ 画像処理・自然言語処理について ~
ディープラーニング入門 ~ 画像処理・自然言語処理について ~
 
PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論
 
20200704 bsp net
20200704 bsp net20200704 bsp net
20200704 bsp net
 
2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)
 
NN, CNN, and Image Analysis
NN, CNN, and Image AnalysisNN, CNN, and Image Analysis
NN, CNN, and Image Analysis
 
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
 
How good is my GAN?
How good is my GAN?How good is my GAN?
How good is my GAN?
 
(文献紹介)深層学習による動被写体ロバストなカメラの動き推定
(文献紹介)深層学習による動被写体ロバストなカメラの動き推定(文献紹介)深層学習による動被写体ロバストなカメラの動き推定
(文献紹介)深層学習による動被写体ロバストなカメラの動き推定
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論公平性を保証したAI/機械学習
アルゴリズムの最新理論
公平性を保証したAI/機械学習
アルゴリズムの最新理論
 
ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
 
実践データ分析基礎
実践データ分析基礎実践データ分析基礎
実践データ分析基礎
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
データ解析13 線形判別分析
データ解析13 線形判別分析データ解析13 線形判別分析
データ解析13 線形判別分析
 
Long short-term memory (LSTM)
Long short-term memory (LSTM)Long short-term memory (LSTM)
Long short-term memory (LSTM)
 
ベイズ統計によるデータ解析
ベイズ統計によるデータ解析ベイズ統計によるデータ解析
ベイズ統計によるデータ解析
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 
MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出
 

Recently uploaded

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 

Recently uploaded (6)

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 

パターン認識モデル初歩の初歩

  • 2. © 2018 SG Corporation 2 ◍ 機械学習といっても、結局のところ、入力に対するパターンをカテゴライズし て、分類しているという以上のものではない。 ◍ 一般的にそれらに対して、どのようなモデルが考えられているか。 ◍ 事後確率 ◍ 距離 ◍ 関数値 ◍ 決定木 ◍ この4つのモデルを非常に簡略化したシナリオで説明する。 ◍ 本来は多次元データ分析が主となるが、一次元データとする。 ◍ サンプルプログラムにはRを用いた。 はじめに
  • 3. © 2018 SG Corporation 3 ◍ 4つのモデルで、すべて同じシナリオを用いる。 ◍ 入力データは 1次元の小数点1桁までの数値。 ◍ 総データ数:6500 ◍ 各データはA,B,Cのいずれかのクラスに属する。 ◍ A,B,Cはそれぞれ、以下のような正規分布とする。 シナリオ クラス 出現回数 平均 標準偏差 A 3000 3 1 B 2000 12 1 C 1500 8 1
  • 5. © 2018 SG Corporation 5 ◍ では、やってみよう… シナリオ
  • 6. © 2018 SG Corporation 6 ◍ データの生成 シナリオ value <- round(rnorm(3000, 3, 1), 1) class <- 1 dataA <- data.frame(value, class) value <- round(rnorm(2000, 12, 1), 1) class <- 2 dataB <- data.frame(value, class) value <- round(rnorm(1500, 8, 1), 1) class <- 3 dataC <- data.frame(value, class) data <- rbind(dataA, dataB, dataC)
  • 7. © 2018 SG Corporation 7 ◍ あらかじめ分類が分かっているデータで、データがどのクラスに分類されるか の確率を算出しておく。 ◍ ベイズの識別規則 ◍ 事後確率がもっとも大きなクラスに観測データを分類する。 ◍ 事前確率:P(Ci) クラスCiの生起確率 ◍ クラス条件付き確率(尤度): p(x|Ci) クラスが与えられた下でのデータxの確率分布 ◍ 周辺確率:p(x) データxの生起確率 ◍ 事後確率: P(Ci|x) 観測データxが与えられた下で、それがクラスCiに属する条件付き確率 事後確率
  • 8. ◍ データxとクラスCiの同時確率 𝑃(𝑥, 𝐶𝑖) = 𝑃 𝐶𝑖 𝑥 𝑝(𝑥) = 𝑝(𝑥|𝐶𝑖)𝑃(𝐶𝑖) ◍ 同時確率:P(x, Ci) データxとクラスCiが同時に生起する確率 ◍ 事前確率:P(Ci) クラスCiの生起確率 ◍ クラス条件付き確率(尤度): p(x|Ci) クラスが与えられた下でのデータxの確率分布 ◍ 周辺確率:p(x) データxの生起確率 ◍ 事後確率: P(Ci|x) 観測データxが与えられた下で、それがクラスCiに属する条件付き確率 © 2018 SG Corporation 8 事後確率
  • 9. © 2018 SG Corporation 9 ◍ ベイズの識別規則 ◍ 事後確率の求め方 ◍ データxが与えられた下で、それがクラスCiに属する確率 𝑃 𝐶𝑖 𝑥 = 𝑝(𝑥|𝐶𝑖) 𝑝(𝑥) × 𝑃(𝐶𝑖) ◍ 事前確率:P(Ci) クラスCiの生起確率 ◍ クラス条件付き確率(尤度): p(x|Ci) クラスが与えられた下でのデータxの確率分布 ◍ 周辺確率:p(x) データxの生起確率 事後確率
  • 10. © 2018 SG Corporation 10 ◍ ベイズの識別規則 ◍ 事後確率の求め方 ◍ 観測データxが与えられた下で、それがクラスCiに属する確率 𝑃 𝐶𝑖 𝑥 = 𝑝(𝑥|𝐶𝑖) 𝑝(𝑥) × 𝑃(𝐶𝑖) ◍ 事前確率:P(Ci) を比: p(x|Ci) / p(x) で修正したもの。 ◍ 比: p(x|Ci) / p(x) が1より大きければ、事後確率は事前確率より大きくなる。 ◍ 比: p(x|Ci) / p(x) が1より小さければ、事後確率は事前確率より小さくなる。 事後確率
  • 11. © 2018 SG Corporation 11 ◍ 今回のシナリオの場合。 ◍ 事前確率:P(A), P(B), P(C) クラスA,B,Cの各々の出現回数/総データ数 ◍ クラス条件付き確率(尤度): p(x|A), p(x|B), p(x|C) 同じ値のデータxのクラスA,B,Cでの各々の出現回数/同じ値のデータxの総数 ◍ 周辺確率:p(x) データxの出現回数/総データ数 ◍ 事後確率: P(A|x), P(B|x), P(C|x) 観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率 事後確率
  • 12. © 2018 SG Corporation 12 ◍ では、やってみよう… 事後確率
  • 13. © 2018 SG Corporation 13 𝑃 𝐶𝑖 𝑥 = 𝑝(𝑥|𝐶𝑖) 𝑝(𝑥) × 𝑃(𝐶𝑖) 事後確率 pd <- prop.table(table(data[,2])) pa <- pd["A"] * prop.table(table(dataA[,1])) pb <- pd["B"] * prop.table(table(dataB[,1])) pc <- pd["C"] * prop.table(table(dataC[,1])) px <- prop.table(table(data[,1])) pa <- pa / px[names(pa)] pb <- pb / px[names(pb)] pc <- pc / px[names(pc)]
  • 14. © 2018 SG Corporation 14 ◍ 事後確率: P(A|x), P(B|x), P(C|x) 観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率。 事後確率
  • 15. © 2018 SG Corporation 15 ◍ それっぽい、分布が得られた… ◍ 実際には ◍ 誤り率の大きな領域では判断を避ける。リジェクト。 ◍ とかも必要。 事後確率
  • 16. © 2018 SG Corporation 16 ◍ あらかじめ分類が分かっているデータとの距離で、観測データがどのクラスに 分類されるかを決定する。 ◍ 最近傍法(NN法) ◍ 観測データと分類済みデータとの類似度を距離で計算し、もっとも距離が近い 分類済みデータを持つクラスに分類する。 距離 ?
  • 17. © 2018 SG Corporation 17 ◍ 今回のシナリオの場合。 ◍ 観測データ:x ◍ 分類済みデータ:x1..3000 (A), x1..2000 (B), x1..1500 (C) ◍ 観測データから+-0.5以内の距離に、幾つ分類済みデータがあるかを数える。 ◍ 離れている距離に従って、0.6^(距離*10)の重みをかける。 距離
  • 18. © 2018 SG Corporation 18 ◍ では、やってみよう… 距離
  • 19. © 2018 SG Corporation 19 距離 dx <- 0.5 weight <- 0.6 knn <- function(x) { d <- data[((x - dx) <= data$value) & (data$value <= (x + dx)),] dist <- round(abs(d$value - x), 1) d <- table(data.frame(dist, d$class)) d <- floor(d * (weight ^ (10 * as.numeric(labels(d)$dist)))) return(d) } sum_knn <- function(x) { colSums(knn(x)) }
  • 20. © 2018 SG Corporation 20 距離 x <- seq(-0.5, 15.0, 0.1) nn <- sapply(x, sum_knn)
  • 21. © 2018 SG Corporation 21 ◍ 観測データxから、近距離に存在するクラスA,B,Cの数。 距離
  • 22. © 2018 SG Corporation 22 ◍ それっぽい、分布が得られた… ◍ 実際には ◍ 同距離のクラスが同数の場合にはどうするか。 ◍ 重み等のパラメータをどう決定するか。 ◍ とかも必要。 距離
  • 23. © 2018 SG Corporation 23 ◍ あらかじめ分類が分かっているデータで、データがどのクラスに分類されるか の識別関数の係数を算出しておく。 ◍ ニューラルネットワーク ◍ 単純な線形関数と非線形の活性化関数の組み合わせで、識別関数を構成する。 関数値
  • 24. © 2018 SG Corporation 24 ◍ 最終的なアウトプットのイメージ。 ◍ 各クラスの確率分布がわかると都合がいい。 関数値 x
  • 25. © 2018 SG Corporation 25 ◍ ニューラルネットワーク 関数値 入 力 層 出 力 層
  • 26. © 2018 SG Corporation 26 ◍ これは何をやっているのか? 関数値
  • 27. © 2018 SG Corporation 27 ◍ 線形関数 ◍ wx + b 関数値 x 1 w1x+b1 w2x+b2
  • 28. © 2018 SG Corporation 28 ◍ 線形関数だけでは何層積み重ねても、線形関数になるだけ… 関数値 x
  • 29. © 2018 SG Corporation 29 ◍ 線形関数の後に非線形関数を挟むことにする。 ◍ relu : rectified linear unit 𝑓 𝑢 = max(𝑢, 0) 関数値 x 1 f(w1x+b1) f( w2x+b2)
  • 30. © 2018 SG Corporation 30 ◍ relu : rectified linear unit ◍ これにより、複雑な関数が表現可能になる。 ◍ 例えば… 関数値 z11 = f(0.2x + 1) z12 = f(x) z21 = f(z11 - 0.5z12 + 1) z22 = f(0.5z11 + 0.5z12 - 2) z = z21 + 3z22 - 1.5
  • 31. © 2018 SG Corporation 31 ◍ softmax ◍ 事後確率: P(A|x), P(B|x), P(C|x) 観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率 ◍ 最終結果を事後確率として解釈したい。 ◍ 線形関数とreluの組み合わせだけでは、負の値や絶対値の大きな値が発生して しまう。 ◍ 関数の値域を0〜1の範囲に収める。 ◍ 全クラスについての和を取ると、1になるように正規化する。 関数値
  • 32. © 2018 SG Corporation 32 関数値 ◍ softmax ◍ 出力層のk番目のユニットの出力値 ◍ K : クラスの種類数 𝑝 𝐶 𝑘|𝑥 = 𝑦 𝑘 ≡ exp(𝑢 𝑘) 𝑗=1 𝐾 exp(𝑢𝑗) ◍ 事後確率がもっとも大きなクラスに観測データを分類する。
  • 33. © 2018 SG Corporation 33 ◍ ニューラルネットワーク ◍ とりあえず、わかった。 関数値 入 力 層 出 力 層
  • 34. © 2018 SG Corporation 34 ◍ では、線形関数の係数をどうやって決めるか。 ◍ wx + b 関数値 x 1 w1x+b1 w2x+b2
  • 35. © 2018 SG Corporation 35 ◍ あらかじめ分類が分かっているデータで、データがどのクラスに分類されるか の識別関数の係数を算出しておく。 ◍ 基本的なアイデア ◍ 適当な初期値の係数で実際に学習データを読み込ませて、出力値と正解値を比 較する。 ◍ 出力値と正解値の誤差が少なくなる方向に徐々に係数を更新して、計算を繰り 返す。 ◍ いわゆる、教師あり学習。 関数値
  • 36. © 2018 SG Corporation 36 ◍ 損失関数(誤差関数) ◍ 出力値と正解値の近さの尺度 関数値 出 力 層 正 解 値 0.6 0.1 0.3 1 0 0
  • 37. © 2018 SG Corporation 37 ◍ 損失関数(誤差関数) ◍ 出力値と正解値の近さの尺度 ◍ 目標出力 ◍ クラス数が3で正解値がクラス1の場合:d = [1 0 0] 関数値 出 力 層 正 解 値 0.6 0.1 0.3 1 0 0
  • 38. © 2018 SG Corporation 38 関数値 ◍ 損失関数(誤差関数) ◍ 出力値と正解値の近さの尺度 ◍ 尤度(n:学習データの番号、k:クラスの番号) 𝑝 𝐶 𝑘|𝑥 = 𝑦 𝑘 𝑝 d x = 𝑘=1 𝐾 𝑝 𝐶 𝑘|x 𝑑 𝑘 ◍ N個の学習データについて 𝑛=1 𝑁 𝑝 d 𝑛 x 𝑛;w = 𝑛=1 𝑁 𝑘=1 𝐾 (𝑦 𝑘(x;w)) 𝑑 𝑛𝑘
  • 39. © 2018 SG Corporation 39 ◍ 尤度は何を表しているのか。 ◍ N個の学習データについて ◍ 0.4 x 0.5 x 0.6 x… ◍ 0.99 x 0.98 x 0.95 x… ◍ 1 x 1 x 1 x… ◍ 尤度が大きいほど、より目標出力との違いがなくなる。 ◍ 尤度が最大になるような方向を目標とする。 関数値
  • 40. © 2018 SG Corporation 40 ◍ 尤度のままでは、使いにくいので… 𝑛=1 𝑁 𝑘=1 𝐾 (𝑦 𝑘(x;w)) 𝑑 𝑛𝑘 ◍ 対数をとって、符号を反転しておく。 ◍ 交差エントロピー 𝐸 𝐰 = − 𝑛=1 𝑁 𝑘=1 𝐾 𝑑 𝑛𝑘log(𝑦 𝑘(x 𝑛; w)) ◍ 交差エントロピーが最小になるような方向を目標とする。 関数値
  • 41. © 2018 SG Corporation 41 ◍ では、損失関数をどうやって最小値に近づけるか。 ◍ 勾配降下法 ◍ 単純に一次微分値を見て、交差エントロピーが小さくなる方向に係数を動かす。 ∇𝐸 𝐰 = 𝜕𝐸 𝐰 𝜕𝐰 関数値
  • 42. ◍ 補足 ◍ 合成関数の微分 𝑦 = 𝑓 𝑥 , 𝑧 = 𝑔 𝑦 𝑑𝑧 𝑑𝑥 = 𝑑𝑧 𝑑𝑦 𝑑𝑦 𝑑𝑥 𝑦1 = 𝑓1 𝑥 , … , 𝑦𝑛 = 𝑓𝑛 𝑥 , 𝑧 = 𝑔 𝑦1, … , 𝑦𝑛 𝜕𝑧 𝜕𝑥 = 𝑘=1 𝑛 𝜕𝑧 𝜕𝑦 𝑘 𝜕𝑦 𝑘 𝜕𝑥 © 2018 SG Corporation 42 関数値
  • 43. ◍ バックプロパゲーション ◍ 記号を分解しておく。 𝑢1 = 𝑤1 𝑥 + 𝑏1 𝑧1 = 𝑓(𝑢1) © 2018 SG Corporation 43 関数値 x 1 f(w1x+b1) f( w2x+b2)
  • 44. © 2018 SG Corporation 44 ◍ バックプロパゲーション 𝜕𝐸 𝑛 𝜕𝑤𝑗𝑖 (𝑙) = 𝜕𝐸 𝑛 𝜕𝑢𝑗 (𝑙) 𝜕𝑢𝑗 (𝑙) 𝜕𝑤𝑗𝑖 (𝑙) 関数値 i 𝑢𝑗 (𝑙) k 𝑙 − 1 𝑙 𝑙 + 1 𝑤𝑗𝑖 (𝑙)
  • 45. © 2018 SG Corporation 45 ◍ バックプロパゲーション 𝜕𝐸 𝑛 𝜕𝑤𝑗𝑖 (𝑙) = 𝜕𝐸 𝑛 𝜕𝑢𝑗 (𝑙) 𝜕𝑢𝑗 (𝑙) 𝜕𝑤𝑗𝑖 (𝑙) 関数値 i 𝑢𝑗 (𝑙) k 𝑙 − 1 𝑙 𝑙 + 1 𝑤𝑗𝑖 (𝑙)
  • 46. ◍ バックプロパゲーション 𝛿𝑗 (𝑙) ≡ 𝜕𝐸 𝑛 𝜕𝑢𝑗 𝑙 = 𝑘 𝜕𝐸 𝑛 𝜕𝑢 𝑘 𝑙+1 𝜕𝑢 𝑘 𝑙+1 𝜕𝑢𝑗 𝑙 = 𝑘 𝛿 𝑘 𝑙+1 (𝑤 𝑘𝑗 (𝑙+1) 𝑓′(𝑢𝑗 (𝑙) )) © 2018 SG Corporation 46 関数値 i 𝑢𝑗 (𝑙) 𝑢 𝑘−1 (𝑙+1) 𝑢 𝑘 (𝑙+1) 𝑢 𝑘+1 (𝑙+1) 𝑙 − 1 𝑙 𝑙 + 1 𝑤𝑗𝑖 (𝑙)
  • 47. © 2018 SG Corporation 47 ◍ バックプロパゲーション 𝜕𝐸 𝑛 𝜕𝑤𝑗𝑖 (𝑙) = 𝜕𝐸 𝑛 𝜕𝑢𝑗 (𝑙) 𝜕𝑢𝑗 (𝑙) 𝜕𝑤𝑗𝑖 (𝑙) 関数値 i 𝑢𝑗 (𝑙) k 𝑙 − 1 𝑙 𝑙 + 1 𝑤𝑗𝑖 (𝑙)
  • 48. ◍ バックプロパゲーション 𝑧1 = 𝑓(𝑢1) 𝑢2 = 𝑤2 𝑧1 + 𝑏2 𝜕𝑢𝑗 (𝑙) 𝜕𝑤𝑗𝑖 (𝑙) = 𝑧𝑖 (𝑙−1) © 2018 SG Corporation 48 関数値 x 1 f(w1x+b1) f( w2x+b2)
  • 49. © 2018 SG Corporation 49 ◍ バックプロパゲーション ◍ 一次微分の一般形 𝜕𝐸 𝑛 𝜕𝑤𝑗𝑖 (𝑙) = 𝛿𝑗 (𝑙) 𝑧𝑖 (𝑙−1) 関数値 入 力 層 出 力 層
  • 50. ◍ バックプロパゲーション ◍ 出力層(softmax) 𝑦 𝑘 ≡ exp(𝑢 𝑘) 𝑗=1 𝐾 exp(𝑢𝑗) 𝛿𝑗 (𝐿) = 𝜕𝐸 𝑛 𝜕𝑢𝑗 (𝐿) = − 𝑘 𝑑 𝑘 1 𝑦 𝑘 𝜕𝑦 𝑘 𝜕𝑢𝑗 (𝐿) = −𝑑𝑗(1 − 𝑦𝑗) − 𝑘≠𝑗 𝑑 𝑘(−𝑦𝑗) = 𝑘 𝑑 𝑘(𝑦𝑗 − 𝑑𝑗) = 𝑦𝑗 − 𝑑𝑗 © 2018 SG Corporation 50 関数値
  • 51. ◍ 補足 ◍ 指数関数の合成関数の微分 𝑦 = exp(𝑥) 𝑛 + exp(𝑥) 𝑑𝑦 𝑑𝑥 = exp(𝑥) 𝑛 + exp(𝑥) − exp(𝑥) 𝑛 + exp(𝑥) 2 𝑦 = 𝑚 𝑛 + exp(𝑥) 𝑑𝑦 𝑑𝑥 = − 𝑚 exp 𝑥 𝑛 + exp(𝑥) 2 © 2018 SG Corporation 51 関数値
  • 52. © 2018 SG Corporation 52 ◍ 以上をまとめると… ◍ アルゴリズム ◍ 順伝搬 𝐔 𝒍 = 𝐖(𝑙) 𝐙(𝑙−1) + 𝐛(𝑙) 𝟏 𝑁 T 𝐙 𝑙 = 𝑓(𝑙)(𝐔(𝑙)) ◍ 逆伝搬 ∆(𝑙)= 𝑓(𝑙)′(𝐔(𝑙))⨀(𝐖 𝑙+1 T∆(𝑙+1)) ◍ 更新 𝐖(𝑙) ← 𝐖 𝑙 − 𝜖 1 𝑁 ∆(𝑙) 𝐙 𝑙−1 T 𝐛(𝑙) ← 𝐛 𝑙 − 𝜖 1 𝑁 ∆(𝑙) 𝟏 𝑁 関数値
  • 53. © 2018 SG Corporation 53 ◍ 今回のシナリオの場合 ◍ ネットワーク: 3x3x3 ◍ ミニバッチサイズ: 100 関数値 入 力 出 力
  • 54. © 2018 SG Corporation 54 ◍ では、やってみよう… 関数値
  • 55. ◍ 基本的な関数 © 2018 SG Corporation 55 関数値 relu <- function(x) ifelse(x >= 0, x, 0) drelu <- function(x) ifelse(x >= 0, 1, 0) dclass <- function(c, size) { d <- rep(0, size) d[c] <- 1 d } softmax <- function(y) { y <- exp(y) y <- y / colSums(y) } centropy <- function(s, d) { -sum(d * log(s)) }
  • 56. ◍ ネットワークモデル(1/2) © 2018 SG Corporation 56 関数値 network_model <- function(bat_size=100) { z1 <- matrix(1, nrow=1, ncol=bat_size) z2 <- matrix(0, nrow=3, ncol=bat_size) z3 <- matrix(0, nrow=3, ncol=bat_size) z4 <- matrix(0, nrow=3, ncol=bat_size) z <- list(z1, z2, z3, z4) b1 <- rep(1, bat_size) b0 <- t(b1) u1 <- matrix(0, nrow=3, ncol=bat_size) u2 <- matrix(0, nrow=3, ncol=bat_size) u3 <- matrix(0, nrow=3, ncol=bat_size) u <- list(u1, u2, u3) d <- matrix(rep(c(1,0,0), bat_size), nrow=3, ncol=bat_size) …
  • 57. ◍ ネットワークモデル(2/2) © 2018 SG Corporation 57 関数値 … # coefficient. w1 <- matrix(c(0.5, 0.5, 0.5), nrow=3, ncol=1) w2 <- matrix(c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5), nrow=3, ncol=3) w3 <- matrix(c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5), nrow=3, ncol=3) w <- list(w1, w2, w3) b <- list(rep(1,3), rep(1,3), rep(1,3)) # function. f <- list(relu, relu, softmax) df <- list(drelu, drelu) delta1 <- matrix(1, nrow=3, ncol=bat_size) delta2 <- matrix(1, nrow=3, ncol=bat_size) delta3 <- matrix(1, nrow=3, ncol=bat_size) delta <- list(delta1, delta2, delta3) return(list(z=z, b0=b0, b1=b1, u=u, d=d, w=w, b=b, f=f, df=df, delta=delta)) }
  • 58. ◍ 学習(1/4) © 2018 SG Corporation 58 関数値 id <- sample(1:6500) data <- data.frame(id, data) data <- data[order(data$id),] data <- data.frame(value=data$value, class=data$class) nm <- network_model() eps <- sqrt(.Machine$double.eps) * 1000
  • 59. ◍ 学習(2/4) © 2018 SG Corporation 59 関数値 # mini batch. mini_batch <- function(data, bat_size=100) { layer <- length(nm$u) for (main_loop in 1:10000) { for (n in 1:65) { i <- (n - 1) * bat_size + 1 nm$z[[1]] <- t(data[i:(i + bat_size - 1), 1]) nm$d <- sapply(data[i:(i + bat_size - 1), 2], dclass, 3) # forward. for (i in 1:layer) { nm$u[[i]] <- nm$w[[i]] %*% (nm$z)[[i]] + nm$b[[i]] %*% nm$b0 nm$z[[i+1]] <- nm$f[[i]](nm$u[[i]]) } …
  • 60. ◍ 学習(3/4) © 2018 SG Corporation 60 関数値 … # backward. nm$delta[[layer]] <- nm$z[[layer+1]] - nm$d for (i in 1:(layer-1)) { nm$delta[[i]] <- nm$df[[i]](nm$u[[i]]) * (nm$w[[i+1]] %*% nm$delta[[i+1]]) } for (i in 1:layer) { nm$w[[i]] <- nm$w[[i]] - eps * (nm$delta[[i]] %*% t(nm$z[[i]]) / bat_size) nm$b[[i]] <- nm$b[[i]] - eps * (nm$delta[[i]] %*% nm$b1 / bat_size) } } } }
  • 61. ◍ 学習(4/4) © 2018 SG Corporation 61 関数値 mini_batch(data)
  • 62. © 2018 SG Corporation 62 ◍ 学習済みニューラルネットワークの係数を使ったsoftmax。 関数値
  • 63. © 2018 SG Corporation 63 ◍ それっぽい、関数が得られた… ◍ 実際には ◍ 係数の発散を抑える。 ◍ 局所解に陥らないようにする。 ◍ とかも必要。 関数値
  • 64. © 2018 SG Corporation 64 ◍ 1つの特徴軸の1つの分割点のみで、分割することを繰り返す。 ◍ どの分割点で分割するかは、不純度と呼ばれる評価関数で決定する。 ◍ 分割された領域に、1クラスしか存在しないと判定した時点で、分割を終了す る。 決定木 x < s0 x < s1 A C B yes no yes no
  • 65. ◍ ジニ係数 ◍ ノードtにおける誤り率 ℐ(𝑡) ≡ 𝑖=𝑗 𝐾 𝑖≠𝑗 𝑃 𝐶𝑖|𝑡 𝑃(𝐶𝑗|𝑡) = 𝑖=1 𝐾 𝑃(𝐶𝑖|𝑡) 2 − 𝑖=1 𝐾 𝑃2 (𝐶𝑖|𝑡) = 1 − 𝑖=1 𝐾 𝑃2(𝐶𝑖|𝑡) = 𝑖=1 𝐾 𝑃(𝐶𝑖|𝑡) 1 − 𝑃(𝐶𝑖|𝑡) © 2018 SG Corporation 65 決定木
  • 66. ◍ ジニ係数 ◍ すべてのクラスが等しく分配されていれば、1に近づく。 ◍ 1種類のクラスのみが分配されていれば、0になる。 © 2018 SG Corporation 66 決定木
  • 67. ◍ 不純度の減り方がもっとも大きくなる点sで分割する。 ◍ ノードtの不純度から分割後の不純度を引く。 ∆ℐ 𝑠, 𝑡 = ℐ 𝑡 − 𝑝 𝐿ℐ 𝑡 𝐿 + 𝑝 𝑅ℐ 𝑡 𝑅 𝑝 𝐿 = 𝑝(𝑡 𝐿) 𝑝(𝑡) 𝑝 𝑅 = 𝑝(𝑡 𝑅) 𝑝(𝑡) © 2018 SG Corporation 67 決定木
  • 68. © 2018 SG Corporation 68 ◍ 今回のケース ◍ 成分は1次元のみ。 ◍ クラスは3種類。 決定木
  • 69. © 2018 SG Corporation 69 ◍ では、やってみよう… 決定木
  • 70. ◍ 基本的な関数 © 2018 SG Corporation 70 決定木 gini <- function(t) { p <- table(t[,2]) p <- p / length(t[,2]) sum(p * (1 - p)) } sgini <- function(s, t) { tl <- t[t$value < s,] pl <- gini(tl) tr <- t[t$value >= s,] pr <- gini(tr) pl * length(tl) / length(t) + pr * length(tr) / length(t) }
  • 71. ◍ 実行 © 2018 SG Corporation 71 決定木 px <- gini(data) x <- seq(-1.0, 15.0, 0.1) g0 <- px - sapply(x, sgini, data)
  • 72. © 2018 SG Corporation 72 ◍ 不純度の減り方 1つ目 : 10.2 決定木
  • 73. © 2018 SG Corporation 73 ◍ 不純度の減り方 2つ目(左) : 5.8 決定木
  • 74. © 2018 SG Corporation 74 ◍ 事後確率: P(A|x), P(B|x), P(C|x) 観測データxが与えられた下で、それがクラスA,B,Cに属する条件付き確率。 事後確率(再掲)
  • 75. © 2018 SG Corporation 75 ◍ それっぽい、分割点が得られた… ◍ 実際には ◍ いつ分割をやめるかの判定。 ◍ 複雑になりすぎた枝を刈り取る。 ◍ とかも必要。 決定木
  • 76. © 2018 SG Corporation 76 ◍ 事後確率 ◍ 学習データから事前確率、周辺確率、尤度から事後確率を算出する。 ◍ 事後確率がもっとも高いクラスに分類する。 ◍ 距離 ◍ 学習データと入力データの距離を算出する。 ◍ 学習データとの距離がもっとも近いクラスに分類する。 ◍ 関数値 ◍ 学習データからの関数の係数を決定する。 ◍ 入力データに関数を適用し、出力値により、クラスを分類する。 ◍ 決定木 ◍ 学習データから、分割点を決定し、決定木を作成する。 ◍ 入力データに決定木を適用し、クラスを分類する。 まとめ
  • 77. © 2018 SG Corporation 77 ◍ はじめてのパターン認識 ◍ 平井 有三(著) ◍ 森北出版 ◍ 深層学習(機械学習プロフェッショナルシリーズ) ◍ 岡谷貴之(著) ◍ 講談社サイエンティフィク ◍ アート・オブ・Rプログラミング ◍ Norman Matloff(著)、大橋真也(監訳)、木下哲也(訳) ◍ オライリー・ジャパン 参考文献
  • 78. © 2018 SG Corporation 78 顧客と社員に信頼されるエス・ジー