2020年2月14日金曜日

センター試験世界史Bを分析その5

目的は予測した語句ができるだけ少なく、高い確率で当たっていればいいということで。
<方法>
・テンソルフローで機械学習を使って、過去のデータに重みをつけたら次の年の出現語句を予想する訓練をして、それが多く当たることを目指す。
具体的には
<入力(=input)>
6172個の語句に1~6172の番号を付ける
intput
=[inp1,inp2,..,inpN,...,inp6127]
inp1:語句1(アイオリス人)が過去10年間に出現した数
inp2:語句2(愛琿条約/アイグン条約)が過去10年間に出現した数
・・・・・・
inpN:語句N(?)が過去10年間に出現した数
・・・・・・
inp6172:語句6172(WTO)が過去10年間に出現した数
→これを与える
(例えば[0, 1, 0,  ... ,10, 0, 0]とか)
<重み(=w)>
w=[w1,w2,....,wN,....w6172]
→これを見つけてくれる
<出力(=output)>
output=w1*inp1+w2*inp2+w3*inp3+.....+w6172*inp6172
=[out1,out2,....,outN,....out6172]
out1:語句1があれば1以上
out2:語句2があれば1以上
・・・・
out6172:語句6172があれば1以上
→これがラベルと近くなるようにしてくれる
<ラベル(label)>
label=[lab1,lab2,....,labN,....lab6172]
lab1:語句1が入力の次の年に出現した数+その関連語句数
lab2:語句2が入力の次の年に出現した数+その関連語句数
・・・・・・
labN:語句Nが入力の次の年に出現した数+その関連語句数
・・・・・・
lab6172:語句6172入力の次の年に出現した数+その関連語句数
→これも与える

とする。

目的はoutputとlabel が一致してほしいので
最小化するロスを次のように設定した。
①output*labelの和が大きくなることを目指す
(labelとoutputともに1以上の語句の数を増やしたい)
②output の1以上の個数を3000ぐらいになることを目指す
(予測する語句数を3000ぐらいにしたい)
(*outputをlabel とまるっきり同じになるように訓練してもうまくいかなかったので、以上のようにした)
<訓練とテスト
全部で2001年から2020年の20年分しかデータがないので10年分x9を訓練の入力(2001~2010,2002~2011,.....,2009~2018の9セット)
1年分x9を訓練のラベル(2011,2012,.....,2019)
10年分x1をテストの入力(2010~2019)
1年分x1をテストのラベル(2020)
とした
9セットで訓練、1セットでテストなので信頼性??だけど。
<結果>
の前に
過去10年分のデータから2020年を予測するのだが、まず何回以上出た語句が何%カバーしてるかを調べる。
これが十分いいなら機械学習する意味ないし。
<2010~2019年に何回以上出現語句が何%2020年出現しているか>
2010~2019年に1回以上出た語句数=1471
2010~2019年に1回以上出た語句が2020年と重複した数=154
カバー率(154/262)=0.5877862595419847
1471語句で58%カバーか・・・・
語句数も少ないし、カバー率も悪いのでこれは使えない。

2010~2019年に2回以上出た語句数=473
2010~2019年に2回以上出た語句が2020年と重複した数=82
カバー率(82/262)=0.31297709923664124
2010~2019年に3回以上出た語句数=156
2010~2019年に3回以上出た語句が2020年と重複した数=54
カバー率(54/262)=0.20610687022900764
2010~2019年に4回以上出た語句数=82
2010~2019年に4回以上出た語句が2020年と重複した数=39
カバー率(39/262)=0.14885496183206107
2010~2019年に5回以上出た語句数=45
2010~2019年に5回以上出た語句が2020年と重複した数=30
カバー率(30/262)=0.11450381679389313
2010~2019年に6回以上出た語句数=33
2010~2019年に6回以上出た語句が2020年と重複した数=27
カバー率(27/262)=0.10305343511450382
2010~2019年に7回以上出た語句数=26
2010~2019年に7回以上出た語句が2020年と重複した数=25
カバー率(25/262)=0.09541984732824428
2010~2019年に8回以上出た語句数=19
2010~2019年に8回以上出た語句が2020年と重複した数=18
カバー率(18/262)=0.06870229007633588
2010~2019年に9回以上出た語句数=10
2010~2019年に9回以上出た語句が2020年と重複した数=10
カバー率(10/262)=0.03816793893129771
2010~2019年に10回以上出た語句数=3
2010~2019年に10回以上出た語句が2020年と重複した数=3
カバー率(3/262)=0.011450381679389313

もうちょっと語句数増えていいのでカバー率も増えてほしい。ので関連語句も含めてみる

<2010~2019年に何回以上出現+関連語句が何%2020年に出現しているか>
2010~2019年に1回以上出た語句+関連語句総数=4449
2010~2019に1回以上出た語句+関連語句数が2020年と重複した数=237
カバー率(237/262)=0.9045801526717557
おおっ!4449こで90%か!20年分と同じような結果に!
でも語句数が多い!
カバー率はこれぐらいで十分。
2010~2019年に2回以上出た語句+関連語句総数=3755
2010~2019に2回以上出た語句+関連語句数が2020年と重複した数=220
カバー率(220/262)=0.8396946564885496
これもカバー率がもうちょっとほしい
語句数ももうちょっと減らしてほしい 2010~2019年に3回以上出た語句+関連語句総数=3187
2010~2019に3回以上出た語句+関連語句数が2020年と重複した数=207
カバー率(207/262)=0.7900763358778626
ここでもう80%を切るから残念。せめてもうちょっとカバーしてほしい。
以下以降は20年分から1回以上出現語句2156こで75%より悪いので考えない。

2010~2019年に4回以上出た語句+関連語句総数=2713
2010~2019に4回以上出た語句+関連語句数が2020年と重複した数=184
カバー率(184/262)=0.7022900763358778

2010~2019年に5回以上出た語句+関連語句総数=2339
2010~2019に5回以上出た語句+関連語句数が2020年と重複した数=167
カバー率(167/262)=0.6374045801526718

2010~2019年に6回以上出た語句+関連語句総数=2015
2010~2019に6回以上出た語句+関連語句数が2020年と重複した数=152
カバー率(152/262)=0.5801526717557252

2010~2019年に7回以上出た語句+関連語句総数=1778
2010~2019に7回以上出た語句+関連語句数が2020年と重複した数=143
カバー率(143/262)=0.5458015267175572

2010~2019年に8回以上出た語句+関連語句総数=1575
2010~2019に8回以上出た語句+関連語句数が2020年と重複した数=137
カバー率(137/262)=0.5229007633587787

2010~2019年に9回以上出た語句+関連語句総数=1391
2010~2019に9回以上出た語句+関連語句数が2020年と重複した数=127
カバー率(127/262)=0.4847328244274809

2010~2019年に10回以上出た語句+関連語句総数=1227
2010~2019に10回以上出た語句+関連語句数が2020年と重複した数=118
カバー率(118/262)=0.45038167938931295

2010~2019年に11回以上出た語句+関連語句総数=1102
2010~2019に11回以上出た語句+関連語句数が2020年と重複した数=112
カバー率(112/262)=0.42748091603053434

2010~2019年に12回以上出た語句+関連語句総数=977
2010~2019に12回以上出た語句+関連語句数が2020年と重複した数=106
カバー率(106/262)=0.40458015267175573

2010~2019年に13回以上出た語句+関連語句総数=864
2010~2019に13回以上出た語句+関連語句数が2020年と重複した数=100
カバー率(100/262)=0.3816793893129771

2010~2019年に14回以上出た語句+関連語句総数=776
2010~2019に14回以上出た語句+関連語句数が2020年と重複した数=94
カバー率(94/262)=0.35877862595419846

2010~2019年に15回以上出た語句+関連語句総数=687
2010~2019に15回以上出た語句+関連語句数が2020年と重複した数=91
カバー率(91/262)=0.3473282442748092

2010~2019年に16回以上出た語句+関連語句総数=615
2010~2019に16回以上出た語句+関連語句数が2020年と重複した数=88
カバー率(88/262)=0.33587786259541985

2010~2019年に17回以上出た語句+関連語句総数=541
2010~2019に17回以上出た語句+関連語句数が2020年と重複した数=84
カバー率(84/262)=0.32061068702290074

2010~2019年に18回以上出た語句+関連語句総数=491
2010~2019に18回以上出た語句+関連語句数が2020年と重複した数=81
カバー率(81/262)=0.30916030534351147

2010~2019年に19回以上出た語句+関連語句総数=446
2010~2019に19回以上出た語句+関連語句数が2020年と重複した数=78
カバー率(78/262)=0.29770992366412213

2010~2019年に20回以上出た語句+関連語句総数=391
2010~2019に20回以上出た語句+関連語句数が2020年と重複した数=74
カバー率(74/262)=0.2824427480916031

というわけで機械学習で具体的に目指したのは3000個ぐらいで85%以上になってほしいかなと。それくらいが妥当かなと。データ数とか少ないしと。
・上の語句を使った世界史穴埋めクイズを作りました
・上の語句を使った世界史正誤クイズを作りました。
*このページから他のサイトも試せます!ぜひ!(ホームページです)

0 件のコメント:

コメントを投稿