前回に引き続き、今回も機械学習のおさらいをしていきたいと思います。前回は、機械学習には「教師あり学習」「教師なし学習」「強化学習」の3つがあることや、それぞれいつ利用すればよいかについてまとめ、第4回「『教師あり学習』の仕組み」に寄せられた質問にお答えしました。
では、機械学習を用いてモデルを作成した場合、そのモデルの性能はどのようにして測ればよいか覚えていますか? 第5回「教師あり学習で作成した『モデル』の性能を測る」で説明したように、教師あり学習の場合、モデルの性能は「教師データ」の一部を用いて測ることができます。
教師データでは、「入力」の値に対して正解となる「出力」の値がセットになっています。その一部を確認用に切り出すのです。確認用に切り出した教師データの入力の値を作成したモデルに入れて、推測結果を取得します。その推測結果と教師データが持っている正解(出力の値)を比較すれば、モデルがどのくらいの性能なのかを確かめることができます。
第4回で示した例のように教師データとして6つの入力・出力のセットを持っているのであれば、1~4までを学習し、5と6は確認用に使うといった具合です。性能チェックに使用するデータは学習に使ってはいけないことに注意してください。
推測結果と正解の比較方法(何をもって正しいとするか)は、課題に依存します。第4回の例のように、入力されたデータを「牛乳」か「コーヒー」に分類する問題であれば、牛乳とコーヒーに正しく分類されているかどうかを見れば良いでしょう。例えば、正解の出力は「牛乳」であるにも関わらず、推測結果として「コーヒー」が出力されるようであれば、そのモデルの性能は低いと考えることができます。
性能チェックでは、チェックに使用するデータの全ての入力に対してモデルによる結果の推測を行い、どの程度正解を当てることができたかを確認します。この方法は、複数のモデルから良いものを選択する「モデルの選択」と、ある1つのモデルの汎用性を測定するための「モデルの評価」の両方で共通です。目的は異なりますが、実施する内容は同じなのです。
例えば、同じ教師データ(学習用データ)を用いて「モデル1」と「モデル2」を作成し、より良いモデルを選択したい場合、共通の確認用データを用いてぞれぞれの推測結果を出力します。もし以下の図に示すような結果が得られたのであれば、モデル1はモデル2よりも優れたモデルだと見なすことができます。
それでは、今回も皆さんからいただいた質問に回答していきたいと思います。まずは、第5回の記事への質問です。
質問3:「モデルをたくさん作って試しに機械学習した後、精度を比較していちばん性能の良いものを選ぶ」のはわかるけど、比較のときに精度を算出しているのに、なぜその後もう一度、評価のために性能を測るの?
「モデルをたくさん作って試しに機械学習した後、精度を比較する」のは「モデルの選択」のためであり、「ある1つのモデルの汎用性を測定する」のは「モデルの評価」のためなので、目的が異なります。そして、目的に応じて性能を測定しなければ、それは適切な性能チェックだとは言えないのです。
以下に、ケースごとの性能チェックの要・不要をまとめます。
■「あるデータを用いて複数のモデルを作成し、最も良いモデルを選んでください」と言われた場合
商品化などで要望されるのは、このパターンが多いでしょう。この場合は、モデルの選択を行った後、評価のために改めて性能を測る必要はありません。一度だけ性能を測り、その結果を基に最も結果が良かったモデルを選択すれば終了です。このような状況ではモデルを選択することだけが目的で、その後の評価まで求められていないからです。
■「あるデータを用いて複数のモデルを作成し、最も良いモデルを選んで、そのモデルの性能を教えてください」と言われた場合
これは非常に厳密な性能確認が要求されています。研究ならば実施する必要がありますが、商品化でここまで確認することは少ないかもしれません。この場合は、モデルを選んだ後に、改めて性能を測定し、評価を行う必要があります。なぜなら、選択時に測定した性能が最も良かったモデルを意図的に選んでいるので、その性能は、モデル自体の性能(未知のデータに対する性能)とは言えないのです。
■「あるデータを用いて、この設定でモデルを作成して、そのモデルの性能を教えてください」と言われた場合
このような要望はまれですが、より良いモデルを作成する過程ではこういったこともあるかもしれません。この場合は、特定のデータを用いて特定の設定で、1つだけモデルを作成することになります。モデルの選択をする必要はないので、最終的に1度、モデルの評価(のための性能測定)のみを行うだけです。
次は、第6回「『教師なし学習』と『教師あり学習』の違い」にいただいた質問です。