Transcript 2章と3章

情報知能学基礎演習
豊田秀樹(2008)『データマイニング入門』 (東京図
書)。2章と3章
情報知能学科
白井 英俊
2章を振り返って
• 2.5.1 偽札データの分析: 判別モデル
パッケージ nnet を用いる。
Flurry & Riedwyl (1988)のお札のデータ(図2.7)による学習
中間層が1層のニューラルネット(a=3, b1=2, b2=3, b3=1)
• 2.5.2 助数詞の分析
パッケージneuralを用いる。助数詞「本」の音韻変化。
中間層が1層のニューラルネット(a=3, b1=1, b2=10, b3=1)
ユニット内部の信号変換:ラジアル基底関数(RBF: radial basis
function)
• 2.5.3 ケーキの購入意思の予測
パッケージneuralを用いる。多層のニューラルネット(MLPモデル)
MultiLayer Perceptron
データは図2.20。これを評価にも用いる
2.5.1偽札データの分析
• 下部マージンと対角線を入力とする。最大値と最小値と用い
て、値を0から1の間の数に変換する (2.10式参照)
下部マージン <(お札データ$下部マージン - min(お札データ$下部マージン))/
(max(お札データ$下部マージン)-min(お札データ$下部マージン))
• 入力層と出力層に対応する行列を作る:
入力層<-cbind(下部マージン,対角線)
出力層<-class.ind(お札データ$真偽)
 学習を行う
set.seed(3)
# 乱数の初期値の設定(しなくてもよい)
ネットワーク学習 <- nnet(入力層, 出力層, size=3, rang=0.3, maxit=2000)
2.5.1偽札データの分析(続)
• 検証
ネットワーク適用 <- predict(ネットワーク学習, 入力層)
# 学習させたネットワークに再度、入力層データを適用
適用結果 <- round(ネットワーク適用, digits=3)
• 試してみよう
いろいろなトポロジーで試そう
• 結果を図示させてみよう
2.5.1偽札データの分析(続):元データ
140
偽
偽
偽
偽
偽偽
真
139
偽偽
偽
138
お札データ$対角線
141
142
真
真
真 真
偽偽
真
真
真
真真
真 真 真真真 真
真
偽
真 真 真
真
真真 真 真 真真 真
真
真
偽
真 真真 真真
真 真
真 真 真 真 真真
真
偽偽
真真
真 真真真 真 真 真
真真 真 真真 真真
偽
偽
真
真真真
真真
真真 真 真
偽 偽
真
真
真 真 真
真真
真真
真
真真
真 真真
真
偽
偽
真
真
真
偽
偽
偽
偽
偽
偽
偽
7
偽
8
偽偽 偽
偽
偽
偽
偽 偽 偽
偽
偽
偽偽
偽
偽
偽
偽偽 偽 偽偽
偽 偽偽
偽偽偽
偽 偽 偽偽
偽 偽偽 偽
偽 偽 偽
偽 偽
偽 偽偽 偽
偽
偽 偽 偽 偽
偽偽 偽
偽 偽
偽
偽偽 偽 偽
偽偽
偽 偽
偽
偽偽
偽
偽
偽
偽
偽
偽
9
10
お札データ$下部マージン
11
12
2.5.1偽札データ(続):適用結果
140
偽
偽
偽
偽
偽偽
■
真
139
偽偽
偽
138
お札データ$対角線
141
142
真
真
真 真
偽偽
真
真
真
真真
真 真 真真真 真
真
偽
■
真 真 真
真
■
真真 真 真 真真 真
真
真
偽
真 真真 真真
真 真
真 真 真 真 真真
真
偽偽
真真
真 真真真 真 真 真
真真 真 真真 真真
偽
偽
真
真真真
真真
真真 真 真
偽 偽
真
真
真 真 真
真真
真真
真
真真
真 真真
真
偽
偽
真
真
真
偽
偽
偽
偽
偽
偽
偽
7
偽
8
偽偽 偽
偽
偽
偽
偽 偽 偽
偽
偽
偽偽
偽
偽
偽
偽偽 偽 偽偽
偽 偽偽
偽偽偽
偽 偽 偽偽
偽 偽偽 偽
偽 偽 偽
偽 偽
偽 偽偽 偽
偽
偽 偽 偽 偽
偽偽 偽
偽 偽
偽
偽偽 偽 偽
偽偽
偽 偽
偽
偽偽
偽
偽
偽
偽
偽
偽
9
10
お札データ$下部マージン
11
12
2.5.2 助数詞の分析
• ユニット内部の信号変換に、シグモイド関数では
なく、ガウシアン関数(RBF)を用いる
• 入力層と出力層に対応する行列を作る
入力層<-as.matrix(鉛筆データ$本数)
出力層<-as.matrix(鉛筆データ$ポン)
入力を1変数とする場合
• 学習させる
ネットワーク学習<-rbftrain(入力層, neurons=10, 出力層, it=1000)
• 検証
ネットワーク適用<-rbf(入力層, ネットワーク学習$weight, ネット
ワーク学習$dist, ネットワーク学習$neurons, ネットワーク学習
$sigma)
表示されるネットワーク
RBF network
START
0.61
0.04
1.5
0
3
1
4
0
0.45
5
0
0.35
0.45
0.58
6
0.23
7
8
0
0.01
-0.09
9
0
-0.93
10
-0.58
0
Prev
Iteration:
Error:
0
Next
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
0
1
2
3
4
5
6
7
8
9
1000
0.4964
0.4117
0.3364
0.3083
0.2725
0.2403
0.2366
0.2147
0.2025
0.1962
0.1948
0.1839
0.1583
0.1584
0.1569
0.1539
0.1404
0.1219
0.1325
0.1222
0.1205
0.1044
0.1147
0.0996
0.1048
0.0992
0.0958
0.0938
0.0891
0.0877
0.0803
0.0769
0.0793
0.0773
0.0678
0.0822
0.0669
0.0751
0.0712
0.0625
0.0708
0.0623
0.0592
0.0652
0.0598
0.0603
0.0583
0.0563
0.0522
0.0539
0.0567
0.0558
0.0601
0.0553
0.0546
0.0533
0.0548
0.0518
0.0511
0.0517
0.0497
0.0476
0.0469
0.0443
0.0495
0.0503
0.0442
0.0465
0.0438
0.0454
0.0474
0.0415
0.0441
0.0396
0.0455
0.0447
0.0451
0.0381
0.0417
0.0394
0.0414
0.0436
0.0413
0.0424
0.0407
0.0371
0.0401
0.0393
0.0386
0.0343
0.0369
0.0395
0.0398
0.0359
0.0361
0.0333
0.0372
0.0384
0.0346
0.0344
0.0336
0.0319
0.0342
0.0339
0.0294
0.0308
0.0326
0.0289
0.0313
0.0286
0.0298
0.0318
0.0312
0.0314
0.0266
0.0282
0.0276
0.0301
0.0272
0.0264
0.0269
0.0275
0.0254
0.0244
0.0258
0.0271
0.0226
0.0229
0.0238
0.0268
0.0236
0.0259
0.0231
0.0221
0.0202
0.0234
0.0247
0.0219
0.0233
0.0243
0.0217
0.0213
0.0215
0.0212
0.0208
0.0222
0.0216
0.0201
0.0192
0.0194
0.0185
0.0209
0.0199
0.0198
0.0206
0.0193
0.0184
0.0195
0.0197
0.0189
0.0174
0.0171
0.0163
0.0168
0.0181
0.0165
0.0176
0.0164
0.0159
0.0155
0.0147
0.0162
0.0153
0.0151
0.0152
0.0154
0.0158
0.0138
0.0142
0.0133
0.0146
0.0148
0.0143
0.0131
0.0144
0.0136
0.0141
0.0125
0.0134
0.0128
0.0127
0.0113
0.0126
0.0114
0.0118
0.0119
0.0108
0.0115
0.0105
0.0107
0.0102
0.0104
0.0106
0.0092
0.0101
0.0103
0.0096
0.0091
0.0093
0.0099
0.0084
0.0098
0.0088
0.0086
0.0074
0.0076
0.0089
0.0071
0.0082
0.343
0.165
0.139
0.114
0.083
0.072
0.045
0.038
0.034
0.033
0.035
0.031
0.028
0.027
0.029
0.026
0.025
0.021
0.017
0.016
0.011
0.009
NaN
0.09
0.04
0.02
0.01
0
0.1
-0.78
0
-0.08
学習された関数の表示(「ぽん」)
RBF network
1
0.98
6
8
EXIT
10
0.843
NETW
0.706
0.569
0.431
0.294
0.157
0.02
0.1
1.643
3.186
4.729
6.271
7.814
9.357
10.9
2.5.2 助数詞の分析(続き)
• 注意:出力層としては「ボン」を選んでいる
つまり、これは「ボン」の判別分析
疑問: ガウシアン関数ではなく、シグモイド関数だとどうだろう?
• 「ホン」、「ポン」も同様に作らないといけない
同様に以下を実行
ネットワーク学習ホ <- nnet(入力層, 出力層ホ , size=10, rang=0.3,maxit=2000)
ネットワーク適用ホ <- predict(ネットワーク学習ホ, 入力層)
適用結果ホ <- round(ネットワーク適用ホ, digits=1)
ネットワーク学習ボ <- nnet(入力層, 出力層ボ , size=10, rang=0.3, maxit=2000)
ネットワーク適用ボ <- predict(ネットワーク学習ボ, 入力層)
適用結果ボ <- round(ネットワーク適用ボ, digits=1)
2.5.2 助数詞の分析(続き)
• 以下をやってみると…
choose <- function(x,h,b,p) { if (h[x] > b[x] && h[x] > p[x]) cat(x,"HON \n")
else { if (b[x] > h[x] && b[x] > p[x]) cat(x,"BON \n")
else cat(x,"PON \n") } }
lapply(1:10,function(x) {choose(x,適用結果ホ,適用結果ボ,適用結果)})
choose2 <- function(x,h,b,p) { if (h[x] > b[x] && h[x] > p[x]) paste(x,"HON ")
else { if (b[x] > h[x] && b[x] > p[x]) paste(x,"BON ")
else paste(x,"PON ") } }
sapply(1:10,function(x) {choose2(x,適用結果ホ,適用結果ボ,適用結果)})
その結果は:
[1] "1 PON " "2 HON " "3 BON " "4 HON " "5 HON " "6 PON " "7 HON "
[8] "8 PON " "9 HON " "10 PON "
実は…
• この課題は、ガウシアン関数を用いるために作られた
もの:入力も出力も1変数に限定していた
• 入力を「本数」に対応した10個の変数とすれば、nnet
で(も)簡単に学習が可能
入力層<-class.ind(鉛筆データ$本数)
出力層<-鉛筆データ[,2:4]
set.seed(3)
ネットワーク学習 <- nnet(入力層, 出力層, size=3, rang=0.3, maxit=2000)
ネットワーク適用 <- predict(ネットワーク学習, 入力層)
適用結果 <- round(ネットワーク適用, digits=3)
2.5.3 ケーキの購入意思の予測
• 多層ネットワークを用いる例
7変数の入力、1変数の出力
入力層<-cbind(高級感,甘さ,新奇性,濃厚さ,食感,華やかさ,値段)
出力層<-as.matrix(ケーキデータ$購入意思)
ネットワーク学習<-mlptrain(入力層, neurons=c(5,3), 出力層, it=1000)
ネットワーク適用<-mlp(入力層, ネットワーク学習$weight, ネットワー
ク学習$dist, ネットワーク学習$neurons, ネットワーク学習$actfns)
colnames(ネットワーク適用)<-c("予測確率(買う)")
適用結果<-round(ネットワーク適用, digits=3)
2.5.3 ケーキの購入意思の予測(続)
MLP Network
START
多層のネットワーク
0.25
-0.47
-0.26
0.32
0.5
0.54
0.26
0.15
0
-0.88
-0.58
0.82
0
-0.59
0.74
0.44
-0.6
0.3
0.64
0.34
0.24
0.59
0.64
-0.78
0.58
0.29
-0.32
-0.75
-0.65
0.98
0.8
0.5
0.67
1
-0.05
-0.18
0.11
0.72
0.67 -0.12
-0.23
0.55
0.2
-0.01
-0.97
0.87
0.13
0.06
0.46
0.39
0.77
0.65
0.6
Iteration:
-0.04
-0.47
-0.24
0.37
0.89
0.68
-0.63
-0.24
FNS
Prev
-0.95
0.57
0.45
Next
207
206
205
204
203
202
201
200
199
198
197
196
195
194
193
192
191
190
189
188
187
186
185
184
183
182
181
180
179
178
177
176
175
174
173
172
171
170
169
168
167
166
165
164
163
162
161
160
159
158
157
156
155
154
153
152
151
150
149
148
147
146
145
144
143
142
141
140
139
138
137
136
135
134
133
132
131
130
129
128
127
126
125
124
123
122
121
120
119
118
117
116
115
114
113
112
111
110
109
108
107
106
105
104
103
102
101
100
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
0
9
8
7
6
5
4
3
2
1
1000
0.53 -0.04
0.48
0.49
2.5.3 ケーキの購入意思の予測(続)
• 検証
count = 0
ng = c()
for (i in 1:nrow(ケーキデータ))
if (ケーキデータ$購入意思[i] == 1 && 適用結果[i] <= 0.5) {
cat(i,"\t","*NG-Fooled*\n")
ng = c(ng,i)
count = count+1 } else {
if (ケーキデータ$購入意思[i] == 0 && 適用結果[i] > 0.5) {
cat(i,"\t","*NG*\n")
ng = c(ng,i)
count = count+1 }
}
とすると、1か所、予測ミスがあることがわかる
3章 人工知能と決定木
• 古典的な人工知能:エキスパートシステム
専門家から「知識を獲得」し、プログラムとして実現ー知
識表現
• データ量の爆発的な増加⇒知識を獲得するアル
ゴリズム、特に磁力で知識を獲得するアルゴリ
ズムの重要性=機械学習(machine learning)
• 機械学習の技術的本質=統計学の「多段層別」
技法
• 決定論的命題ではなく、統計的な相関関係の獲
得
3.2 決定木:タイタニックデータを例に
• タイタニック号の生還者と死亡者の表(表3.1)か
ら、どのような要因が生還・死亡(生死)を分けた
かを考える
• 基準変数:この例では「生死」。目的変数ともいう。
• 予測変数:基準変数(この例では「生死」)を予測する
のに使える変数。説明変数ともいう。この例では、「等
級・立場」、「大人・子ども」、「性別」
• カテゴリカル変数:値が数値ではなくカテゴリ(分類)
• ダミー変数:値が二者選択(二つの水準)の変数
決定木:タイタニックデータを例に(続き)
• CART(Classification And Regression Tree)
Breiman, Olshen, Stone, Friedman(1984)
説明変数を二進分岐させ、決定木を生成
分岐の評価基準:ジニ係数(Gini index)や情報
利得(information gain)
• パッケージは mvpart (他に tree, rpart)
タイタニック木 <- rpart(生死~等級+大人子ども+性別, data=タイ
タニックデータ, method="class")
決定木:タイタニックデータを例に(続き)
printによる表示
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 2201 711 死亡 (0.6769650 0.3230350)
2) 性別=男性 1731 367 死亡 (0.7879838 0.2120162)
4) 大人子ども=大人 1667 338 死亡 (0.7972406 0.2027594) *
5) 大人子ども=子ども 64 29 死亡 (0.5468750 0.4531250)
10) 等級=3等 48 13 死亡 (0.7291667 0.2708333) *
11) 等級=1等,2等 16 0 生還 (0.0000000 1.0000000) *
3) 性別=女性 470 126 生還 (0.2680851 0.7319149)
6) 等級=3等 196 90 死亡 (0.5408163 0.4591837) *
7) 等級=1等,2等,乗務員 274 20 生還 (0.0729927 0.9270073) *
決定木の図示
性別=男性
性別=女性
死亡
1490/711
大人子ども=大人
大人子ども=子ども
死亡
1364/367
等級=1等,2等
死亡
35/29
死亡
35/13
等級=1等,2等,乗務員
生還
126/344
等級=3等
死亡
1329/338
等級=3等
死亡
106/90
生還
0/16
生還
20/254
3.4 予測変数が連続変数の場合
• 偽札データを例に、予測変数が連続変数の場合
の扱いを見る
お札木 <- rpart(真偽 ~ ., data=お札データ)
print(お札木)
n= 215
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 215 100 偽札 (0.534883721 0.465116279)
2) 対角線< 140.45 103 1 偽札 (0.990291262 0.009708738) *
3) 対角線>=140.45 112 13 真札 (0.116071429 0.883928571)
6) 下部マージン>=9.45 16 3 偽札 (0.812500000 0.187500000) *
7) 下部マージン< 9.45 96 0 真札 (0.000000000 1.000000000) *
決定木の表示
対角線< 140.4
対角線>=140.4
偽札
115/100
下部マージン>=9.45
偽札
102/1
判別 偽札 真札
1 115
4
2
0 96
下部マージン< 9.45
真札
13/99
偽札
13/3
真札
0/96
分類木をデータで表示してみると
真
真 真
偽偽
真
真
真
真真
真 真 真真真 真
真
偽
真 真 真
真
真真 真 真 真真 真
真
真
偽
真 真真 真真
真 真
真 真 真 真 真真
真
偽偽
真真
真 真真真 真 真 真
真真 真 真真 真真
偽
偽
真
真真真
真真
真真 真 真
偽 偽
真
真
真 真 真
真真
真真
真
真真
真 真真
真
偽
偽
真
真
真
偽
140
偽
偽
偽
偽
偽偽
真
139
偽偽
偽
138
お札データ$対角線
141
142
真
偽
偽
偽
偽
偽
偽
7
偽
8
偽偽 偽
偽
偽
偽
偽 偽 偽
偽
偽
偽偽
偽
偽
偽
偽偽 偽 偽偽
偽 偽偽
偽偽偽
偽 偽 偽偽
偽 偽偽 偽
偽 偽 偽
偽 偽
偽 偽偽 偽
偽
偽 偽 偽 偽
偽偽 偽
偽 偽
偽
偽偽 偽 偽
偽偽
偽 偽
偽
偽偽
偽
偽
偽
偽
偽
偽
9
10
お札データ$下部マージン
11
12
本日の学習
• Rの作業:p.99~p.111
• 2章の復習:特に内容に注意して
• 3章の理解:何が行われているか、ツールを
『使える』だけではなく、ツールの仕組みも理
解できるようにしよう
• ジニ係数と情報量:3.3.2節の計算を、自分で
やってみよう