本節では、機械学習にどのような手法があるのかについて見ていきます。機械学習で扱う問題の種類、そして各問題における代表的な手法について扱います。
機械学習と一口に言っても、どのような課題を解きたいかによって、アプローチは様々です。課題に関しては、個別に挙げていくとキリがないでしょう。そして、そうした課題のすべてが機械学習で解けるかと言うと、そのようなことはありません。機械学習にも向き・不向きが当然ながら存在します。ですので、どういった課題ならば機械学習を用いて解決することができるのか(あるいは少なくとも試みることができるのか)を把握しておくことは重要です。
個別の課題はそれこそ千差万別ですが、実は課題の構造は共通である場合がほとんどです。そのため、課題を解決する手段は、次の3つにまとめることができます。
まず教師あり学習ですが、これは簡潔に表現すると「与えられたデータ (入力)を元に、そのデータがどんなパターン(出力)になるのかを識別・予測する」ものとなります。例えば、
といった例は分かりやすいでしょう。他にも、
といったものも、「英語に対応する日本語のパターンを予測する」と考えれば、同様に教師あり学習の課題となることが分かるでしょう。すなわち、教師あり学習は入力と出力の間にどのような関係があるのかを学習する手法になります。
また、前述の例を見ると、何を予測したいのかも2種類あることが分かるかと思います。売上を予測したい場合は数字(連続する値)ですし、動物の画像の場合はカテゴリ (連続しない値)を予測することになります。前者のように連続値を予測する問題のことを回帰問題といい、後者のように離散値を予測する問題のことを分類問題といいます。どちらの課題になるかによって、用いる手法が異なりますので、注意が必要です。
教師あり学習は入力と出力がセットとなったデータを用いますが、教師なし学習で用いるデータには出力がありません。では、教師なし学習では一体何を学習するのかと言うと、(入力) データそのものが持つ構造・特徴が対象となります。例えば、
といった時に、教師なし学習を用いることになります。
強化学習とはひとことで言うと「行動を学習する仕組み」と表すことができます。ある環境下で、目的とする報酬(スコア)を最大化するためにはどのような行動をとっていけばいいかを学習していくことです。
強化学習の枠組みは図3.1で書き表されますが、自動運転をこの図に対応させると、「エージェント」が車、「環境」がまさしく車が置かれている環境(場所)になります。車のまわりがどのような「状態」か(まわりの人や車、信号はどのようになっているかなど)を「環境」はフィードバックし、「エージェント」は受け取った「状態」からどうすべきか (走るか止まるか、直進か曲がるかなど)を判断し、実際に「行動」をとります。そうするとまたまわりの「環境」が変わり、その「状態」を「エージェント」にフィードバックし・・・を繰り返すことになります。
そして、「状態」をフィードバックする際、「エージェント」がとった「行動」がどれくらい良かったのかを「 (スコア)として同様にフィードバックすることで、なるべく高い「報酬」が得られる「行動」をとるように学習が進む、という仕組みになっています。
ここまで見てきた通り、教師あり学習、教師なし学習、そして強化学習は対象とする課題の種類が異なるだけですので、どれが優れているか、といったことはありません。単純に問題や目的に応じて使い分けることになります。
課題に応じて用いる機械学習が異なることが分かったところで、具体的な手法について見ていくことにしましょう。ただし、本書では数学的に厳密に理解するところまでは追求しません。どういったコンセプトに基づく手法なのかを見ていくことにします。
*線形回帰*(linear regression) は統計でも用いられる手法で、最もシンプルなモデルの1つと言ってよいでしょう。データ (の分布)があったときに、そのデータに最も当てはまる直線を考えるというものです。図3.2が線形回帰の例です。
例えば横軸が身長、縦軸が体重の関係だとしましょう。既存の身長・体重の組み合わせから回帰直線を求めることによって、新しく身長のデータが与えられた際に、その直線上の値を返すことで体重を予測することができます。
例では2次元ですが、もちろんもっと次元が大きくても問題ありません。また、線形回帰に正則化項を加えた手法としてラッソ回帰(lasso regression)、リッジ回帰 (ridge regression)があります。正則化については後述します。
また先の身長・体重の例では、1つの入力(身長)から出力(体重)を予測しましたが、このように1種類の入力だけを用いて行う回帰分析を単回帰分析と言います。これに対し、複数種類の入力を用いる場合を重回帰分析と言います。
線形回帰は回帰問題に用いる手法でしたが、その分類問題版と言えるものが、ロジスティック回帰(logistic regression) です。名前に「回帰」とついていますが、回帰問題ではなく、分類問題に用いる手法であることに注意してください。ロジスティック回帰では、シグモイド関数という関数をモデルの出力に用います。図3.3がシグモイド関数を図示したものです。
任意の値を0から1の間に写像するシグモイド関数を用いることによって、与えられたデータが正例 (+1) になるか、負例 (0) になるかの確率が求まります。出力の値が0.5以上ならば正例、0.5未満ならば負例と設定しておくことで、データを2種類に分類できるようになるというわけです。
このように、基本的には0.5を閾値として正例・負例を分類しますが、この閾値の設定を0.7や0.3にしたり、分類の調整を行うことができます。例えば迷惑メールの識別でロジスティック回帰を用いる場合、通常のメールが迷惑メールと判定されると問題なので、閾値を高めに設定しておく、といったケースが考えられます。
また、分類問題では2種類の分類だけでなく、もっとたくさんの種類の分類を行いたいというケースも多々あるかと思いますが、そうした場合はシグモイド関数の代わりにソフトマックス関数を用いることになります。
ソフトマックス関数は各種類の出力値をそれぞれ0から1の間、および出力値の合計が1になるような出力を行う関数です。 すなわち、出力が確率分布になっていると解釈することができます。
このように、予測したい出力が2種類なのかそれ以上なのかでモデルの式が変わってくる場合があるため、それぞれを区別するために前者を2クラス分類問題、後者を多クラス分類問題と呼びます。
ランダムフォレスト (random forest) は決定木を用いる手法です。教師あり学習の手法は、結局のところ複数の特徴量 (入力)をもとに予測結果を出力するわけなので、どの特徴量がどんな値になっているかを順々に考えていき、それに基づいて分岐路を作っていけば、最終的に1つのパターン (出力)を予測できるはずです。ここで作られる分岐路が決定木と呼ばれるものになります。
どういった分岐路をつくればいいかについては、データが複雑になればなるほど複数の組み合わせが考えられます。ランダムフォレストでは複数の決定木を作成し、各決定木で用いる特徴量をランダムに抽出することで特徴量の組み合わせ問題に対応します。ひとつの決定木で全ての特徴量を用いるのではなく、複数の決定木それぞれでランダムに一部の特徴量を抽出し、 その抽出された特徴量を用いて具体的な分岐路をつくるわけです。
また、学習に用いるデータも全データを使うのではなく、それぞれの決定木に対してランダムに一部のデータを取り出して学習に用います(これをブートストラップサンプリングと言います)。ランダムに抽出した特徴量とデータを用いて決定木を複数作成するので、ランダムフォレストと言うわけです。
複数の決定木を作成するわけなので、当然予測結果はそれぞれの決定木で異なる場合が発生します。ランダムフォレストでは、それぞれの結果を用いて多数決をとることによって、モデルの最終的な出力を決定します。これにより、もしどれか1つの決定木の精度が悪くても、全体的にはいわば集合知という形で良い精度が得られるはずだ、ということになります。
要は、ランダムフォレストというモデルは、その中で複数のモデルを試していることになります。このように複数のモデルで学習させることをアンサンブル学習と言います。また、厳密には全体から一部のデータを用いて複数のモデルを用いて学習する方法をバギング (bagging) と言い、ランダムフォレストはバギングの中で決定木を用いている手法、という位置付けとなります。
ブースティング(boosting) もバギングと同様、複数のモデルを学習させるアプローチをとります。バギングでは複数のモデルを並列に作成しましたが、ブースティングでは直列に作成、すなわち逐次的にモデルを作成するという点がバギングとは異なります。
例えばブースティングの中でも最も一般的な手法であるAdaBoost(Adaptive Boostingの略)は、直列につないだモデル (弱識別器)を順番に学習していく際、直前のモデルが誤認識してしまったデータの重みを大きくします。一方、正しく認識できたデータの重みは小さくします。これを繰り返すことによって誤認識したデータを優先的に正しく分類できるようにモデルを学習します。そして、最終的に複数のモデル(弱識別器)を1つのモデル (強識別器)として統合します。
また、勾配ブースティング(Gradient Boosting)は、データに重み付けをする代わりに、前のモデルの予測誤差を関数として捉え、それを最小化するように逐次的にモデルの学習を進めるというアプローチを取ります。これにより最適化計算を高速に解くことができる勾配降下法やニュートン法などの既存手法を適用することができ、さらにXGBoost(eXtreme Gradient Boosting) というアルゴリズムによって高速に学習計算をすることができるようになりました。
ただし、プースティングは逐次的に学習を進めていく分、バギング手法よりも学習に時間がかかってしまうのが通常です。その一方、誤認識を減らすように学習が進められるので、得られる予測精度は高くなる傾向にあります。
サポートベクターマシン(Support Vector Machine) はSVMとも呼ばれ、高度な数学的理論に支えられた手法であるために、ディープラーニングが考えられる以前は機械学習において最も人気のあった手法の1つでした。コンセプトは非常に明快で、(入力に用いる) 異なるクラスの各データ点との距離が最大となるような境界線を求めることで、パターン分類を行うというものです。この距離を最大化することをマージン最大化と言います。これだけ聞くと非常に簡単に思えますが、実際は、
という問題も想定しなくてはならないので、これらに対処する必要があります。
前者は単純に直線ではなく超平面を考えればよいわけですが、後者は何をもってマージン最大化となるかを考える必要があります。そこでSVMでは、データをあえて高次元に写像することで、その写像後の空間で線形分類できるようにするというアプローチがとられました。この写像に用いられる関数のことをカーネル関数と言います。またその際、計算が複雑にならないようにするテクニックのことをカーネルトリックと言います。
自己回帰モデル(autoregressive model, ARモデル)は一般的に回帰問題に適用される手法ですが、対象とするデータに大きな特徴があります。それは、このモデルが対象とするのは時系列データであるということです。
時系列データとはその名の通り、時間軸に沿ったデータのことを指します。例えば株価の日足の推移、世界人口の年ごとの推移、インターネット通信におけるパケット通信量の推移など、実社会には数多くの時系列データが存在します。そして、これらの将来の数値を予測したいという場面も数多く見受けられるでしょう。自己回帰モデルは、こうした時系列データの分析に用いられる手法となります。時系列データ分析のことを単純に時系列分析とも言います。
時系列データを分析すると言っても、特別難しいことはありません。要は、過去のデータとの関係性を何かしらモデル化できれば良いわけです。下式が、自己回帰モデルを定式化したものとなります。過去のデータとの関係性を考えるので、時刻tか
ら過去に向かって遡れる分だけ過去を見ていきます。$ t - 1 , t - 2, \dots t-n $と遡れる分だけ過去を見ていきます。
$$ x_t = c + \sum_{i=1}^{n} w_i x_{t-i} + \epsilon \\ = c + w_1 x_{t-1} + w_2 x_{t-2} + \cdots + w_n x_{t-n} + \epsilon $$
ここで、$ x_{t-1}, x_{t-2}, \dots $ がそれぞれ対象とする過去時刻の時系列データ、$ w_t $ がその過去時刻のデータに関する重み(パラメータ)、$c$ が定数(データ全体の偏りを調整するための項)、$ e $ がデータに含まれるノイズ(モデル化できないもの)となります。いきなり式を見ると混乱してしまうかもしれませんが、要は過去のデータ $ x_{t-1}, x_{t-2}, \dots $ が、予測したい現在のデータ $ x_t $ に対し、それぞれどれくらいの影響度合い $ w_t $ をもっているかをそのまま表現しているに過ぎません。他の機械学習のモデルと同様「実現したいことを、数式で表す」ことを素直に行ったモデルです。
また、上式における入力 $ x_t $ は、1種類でも複数種類でも問題ありません。複数種類の場合、$ x_t $ はベクトルとなりますが、このときの自己回帰モデルを ベクトル自己回帰モデル(vector autoregressive model、VARモデル)と呼びます。
教師なし学習は入力データにある構造や特徴をつかむためのものですが、そのうちの k-means法 と呼ばれる手法は、データをk個のグループに分けることを目的としています。すなわち、元のデータからグループ構造を見つけ出し、それぞれをまとめる、ということになります。ただし、このk個の値は自分で設定する値となります。また、グループのことを正確には クラスター(cluster)と言います。データがどのようなクラスターに分けられるかを分析することをクラスター分析と言い、k-meansもクラスター分析手法のひとつとなります。
アプローチとしてはシンプルで、次のようになります。
これにより、最終的にはk個のクラスターに分類されることが分かるかと思います。得られた各クラスターがどういったものなのかを解釈するのは、人間の作業になります。
最初に「適当に各データをクラスターに振り分ける」処理に関しては、適当にk個の重心(の代わり)となる点を設定し、クラスターのうち、最も距離が近い重心に対応するクラスターにまずは各データを割り振る、という手順を踏むことが多いです(図3.6)。
先ほどのk-means法はデータを別々のクラスターに並列に分類することを目的とした手法でしたが、クラスターの階層構造を求める手法も存在し、代表的な手法に ウォード法 や 最短距離法 などがあります。ウォード法は各データの平均的なばらつきが最小になるようにクラスターを作っていくことで階層構造を作り、最短距離法は最も距離が近い2つのデータ(クラスター)を選び、それらを1つのクラスターにまとめることで階層構造を作ります。
例えば 図3.7左のように、6つの点(データ)A、B、C、D、E、Fがあったとしましょう。このとき、最短距離法で階層構造を求めることを考えると、まず最も距離が近い2点はA、Bとなるので、A、Bをまとめます(クラスターAB)。続いて距離が近いのはC、Dの2点、そしてさらに次に3番目にF、Eの2点となるので、これらもそれぞれまとめます(クラスターCD、クラスターEF)。さて、次に距離が近いのは、先に求めたクラスターABとCDとなるので、これらをまとめます(クラスターABCD)。最後に、クラスターABCDとクラスターEFをまとめれば、すべてのデータがひとつのクラスターに属することになり、ここで終了となります。
このクラスタリングにおける各クラスターは、図3.7右のような樹形図で表すことができ、まさしくこれを階層構造と言っているに他なりません。また、この樹形図のことを デンドログラム(dendrogram)と言います。今回の例ではデータ数が少ないためデータを1つひとつの階層までで見ていますが、デンドログラムをどの深さまで見るかによって、階層構造を分析するクラスター数は変化することになります。
k-means法やウォード法はデータをクラスタに分類することでデータの構造をつかむ手法でしたが、主成分分析(Principal Component Analysis、PCA)は、データの特徴量間の関係性、すなわち相関を分析することでデータの構造をつかむ手法になります。
特に特徴量の数が多い場合に用いられ、相関をもつ多数の特徴量から、相関のない少数の特徴量へと次元削減することが主たる目的となります。特徴量が少なくなることによってデータの分析をしやすくなったり、教師あり学習の入力として用いる場合に計算量を減らせるといった利点があります。
次元削減の手法としては、主成分分析以外に特異值分解(Singular Value Decomposition, SVD)も、主に文章データを扱う場合によく用いられます。また、データの次元を2、3次元まで削減することによって可視化を行う手法もよく用いられます。2次元への次元削減・可視化手法は多次元尺度構成法(Multi-Dimensional Scaling, MDS)、2次元・3次元はt-SNE (t-distributed Stochastic Neighbor Embedding) が有名です。
協調フィルタリング(collaborative filtering)は、レコメンデーション(recommendation)に用いられる手法のひとつです。レコメンデーションは、文字通りレコメンドシステム (推薦システム) に用いられ、例えばECサイト等でユーザーの購買履歴をもとに好みを分析し、関心がありそうな商品をおすすめする、などに活用されています。Amazonの商品ページで表示される「この商品を買った人はこんな商品も買っています」の裏側には協調フィルタリングが用いられていたというのは有名な話です。
協調フィルタリングの考え方はシンプルで、「対象ユーザーは買っていないが、似ているユーザーは買っている商品を推薦する」というものです。ユーザー間の類似度を定義することで、類似度の高いユーザーが購入済の商品を推薦することができるわけです。例えば同じ商品へのレビュー評価の相関係数などが類似度として用いられます。ただし、「他のユーザーの情報を参照する」ことからも分かる通り、協調フィルタリングは事前にある程度の参考できるデータがない限り、推薦を行うことができません。これをコールドスタート問題(cold start problem)と言います。
これに対し、ユーザーではなく商品側に何かしらの特徴量を付与し、特徴が似ている商品を推薦するというコンテンツベースフィルタリング(content-based filtering)は、対象ユーザーのデータさえあれば推薦を行うことができるので、コールドスタート問題を回避することができます。ただし、反対にこちらは他のユーザー情報を参照することができないので、コンテンツベースフィルタリングのほうが優れている、というわけではありません。
トピックモデル(topic model)は、k-means法やウォード法と同様クラスタリングを行うモデルですが、データをひとつのクラスタに分類するk-means法などと異なり、トピックモデルは複数のクラスタにデータを分類するのが大きな特徴です。 トピックモデルの代表的な手法に潜在的ディリクレ配分法(latent Dirichlet allocation、LDA)があり、トピックモデルと言えばこのLDAを指すことも多いです。
トピックモデルという名前の由来は、文書データを対象とした際、各文書は「複数の潜在的なトピックから確率的に生成される」と仮定したモデルであるためです。例えばニュース記事を政治・経済・芸能・スポーツに分けようとした際に、どのトピックに分類されるかを、記事内に出てくる単語からそれぞれ確率で求めます。これにより、各文書データ間の類似度も求めることができるため、トピックモデルは似た文章を推薦する、すなわちレコメンドシステムに用いることができます。他にも、例えばECサイトにおいて、先ほどの文書データをユーザー、単語を商品と考えると、ECサイトのレコメンドにも応用することができます。
強化学習は環境から状態を受け取り、そこからより高い報酬を受け取れるような行動を選択するよう学習していくものでした。この枠組みをもう少し掘り下げて見ていくことにしましょう。
強化学習では、状態・行動・報酬のやりとりを1時刻ごと進めて考えていきます。時刻とはすなわちステップと考えると良いでしょう。時刻0からスタートして、ある程度進めたときの時刻をととします。時刻における状態を、、行動を、、報酬をr と表すとすると、強化学習の枠組みは以下のようになります。
このように表すことで、強化学習の目的を「将来にわたって獲得できる累積報酬を最大化する」すなわち、下式を最大化することと考えられるようになります。
$$ R_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots = \sum_{k=1}^{\infty} \gamma^{k-1} r_{t+k} $$
ここで、式中のyは割引率 (discount rate) と呼ばれるハイパーパラメータです。金融でも用いられる用語ですが、例えるならば「今の100円と1年後の100円ならば、今の100円のほうが価値がある」を数式で表現するためのものです。 ここまでに出てきた表現を用いると、強化学習は「累積報酬Rを最大化するような状態s」と行動の対応関係を求めること」になります。どのような行動が取れるかの選択肢は複数あるわけですが、具体的にその中のどの行動が一番将来的に報酬が得られるのかを繰り返し学習することで見つけていくことになります。
強化学習では将来の累積報酬が最大となるような行動を求める必要があるわけですが、一連の行動の組み合わせはそれこそ無数にあるので、どこまで行動の選択肢を考えるべきかが大きな課題となります。 ここで用いられる考え方が活用 (exploitation) と探索 (exploration) です。それぞれ、活用とは「現在知っている情報の中から報酬が最大となるような行動を選ぶ」こと、探索とは「現在知っている情報以外の情報を獲得するために行動を選ぶ」 ことを表します。 強化学習に当てはめると(ある程度の試行の後)、報酬が高かった行動を積極的に選択するのが活用、逆に、他にもっと報酬が高い行動があるのではと別の行動を選択するのが探索になります。探索をせず活用ばかり行うと、最適な行動を見つけ出すことができない可能性が高まりますが、探索ばかり行っても、不要な行動ばかりを試してしまい時間がかかってしまうという問題があります。このように、活用と探索はトレードオフの関係にあり、どうバランスをとるのかが鍵となります。
そこで用いられるのがバンディットアルゴリズム (bandit algorithm)です。バンディットアルゴリズムはまさしく活用と探索のバランスを取りましょう、というもので、$ \epsilon $-greedy方策(epsilon-greedy policy) やUCB方策(upper-confidence bound policy) などが具体的な手法です。
$ \epsilon $-greedy方策は、基本的には活用、すなわち報酬が最大となる行動を選択するが、一定確率で探索、すなわちランダムな行動を選択するものです。それに対しUCB方策は、期待値の高い選択肢を選ぶのを基本戦略としつつ、それまで試した回数が少ない行動は優先的に選択するというものです。 また、いずれの手法名にも含まれている方策 (policy)とは、「ある状態からとりうる行動の選択肢、およびその選択肢をどう決定するかの戦略」のことで、各行動を選択する確率表現となります。
強化学習ではエージェントの行動$a_t$によって、状態が、$s_t$から$s_{t+1}$に遷移すると述べました。実はここで、環境に対して暗黙的にある仮定を置いています。それはマルコフ性(Markov property) と呼ばれるもので、「現在の状態から将来の状態 $s_{t+1}$に遷移する確率は、現在の状態$s_t$にのみ依存し、それより過去の状態には一切依存しない」という性質のことを指します。
本来、環境の状態やエージェントの行動、それに基づく報酬というのは、過去の一連のやりとりによって決まってくるので、過去の全ての事象に依存していると考えるのが普通でしょう。しかし、その全ての依存関係をそのまま素直にモデル化しようとなると、計算がとても複雑になり、扱いきれなくなってしまいます。
そこで、強化学習では環境に対してマルコフ性を仮定することによって、現在の状態$ s_t $,および行動$ a_t $が与えられれば、将来の状態$ s_{t+1} $遷移する確率が求まるようなモデル化を可能にしているわけです。そして、これは何も過去の状態を考慮していないわけではなく、時刻$ t $をからも$ t+1 $の値を求めているので、逐次的に計算を繰り返すことにより、現在の値には過去の情報が全て織り込まれていることになります。また、一般に状態遷移にマルコフ性を仮定したモデルのことをマルコフ決定過程(Markov decision process) と言います。
強化学習の目的は、現在の状態から将来の累積報酬が最大となるような行動を選択していくこと、すなわち最適な方策(戦略)を見つけることですが、$ \epsilon $-greedy方策などが用いられていることからも分かるように、実際に最適な方策を見つけ出すのは非常に困難な場合が多いです。
そこで、最適な方策を直接求める代わりに、状態や行動の「価値」を設定し、その価値が最大となるように学習をするアプローチが考えられました。方策は$ \epsilon $-greedy方策などを用いることにし、その下で、ある状態や行動によって得られる将来の累積報酬をその状態・行動の価値とすれば、価値が最大となる(状態・) 行動が求まり、適切な行動を取れるようになるはずだというわけです。
具体的には、それぞれの価値を表す関数である状態価値関数(state-value function) および行動価値関数(action-value function) を導入します。
これらのうち大事なのが行動価値関数で、単純に「価値関数」と言った場合、行動価値関数を指します。また、式の文字から価値関数のことをQ値 (Q-value)とも呼び、このQ値を最適化できれば、適切な行動が選択できるようになる、というわけです。Q値を最適化する手法にはQ学習(Q-learning) やSARSAがあります。
最適な方策を見つけ出すのは非常に困難な場合が多く、だからこそ先ほどは価値関数を最適化していくという考え方をしましたが、実は直接最適な方策を見つけ出そうというアプローチも存在します。方策勾配法(policy gradient method) と呼ばれるその手法は、方策をあるパラメータで表される関数とし、(累積報酬の期待値が最大となるように)そのパラメータを学習することで、直接方策を学習していくアプローチです。
方策勾配法は、ロボット制御など、特に行動の選択肢が大量にあるような課題で用いられます。というのも、行動の選択肢が大量にある場合、それぞれの価値を算出するだけでも莫大な計算コストがかかってしまい、学習が行えないという懸念があるためです。
方策勾配法ペースの具体的な手法のひとつにREINFORCEというものがあり、AlphaGoにも活用されています。また、価値関数ベースおよび方策勾配ベースの考え方を組み合わせた Actor-Criticというアプローチも存在します。Actor-Criticは、 行動を決めるActor (行動器)と方策を評価するCritic (評価器) から成っているのがその名前の由来です。
本節では、機械学習のモデルを評価するためにはどのような処理が必要なのかを見ていきます。特に、評価において、データをどのように扱うか、どのように評価するかが重要です。
機械学習の手法は様々ですが、実際にそれぞれの手法で得られるモデルを用いる際は、それがどれくらいの予測性能をもっているのかを評価する必要があります。そして、どのように評価すればいいのかはとても重要です。不適切な評価に基づいて得られた「よい」モデルは、将来重大な過ちを導きかねません。ということで、モデルの適切な評価の流れについて、見ていくことにしましょう。
そもそもの機械学習の目的は、手元にあるデータを学習することによってデータの特徴を掴み、未知のデータが与えられたときに、それがどういった出力になるのかを正しく予測できるようになることです。ですので、モデルの評価も、未知のデータに対しての予測能力を見ることが適切です。
しかし、ここで問題があります。未知のデータは文字通り「未知」ですので、準備することができません。ではどうすればいいかと言うと、手元にあるデータから擬似的に未知のデータを作りだすことになります。すなわち、手元にある全データを、学習用のデータと、評価用のデータにランダムに分割して評価します。ここで分割されたデータのうち、学習用のデータを訓練データ、評価用のデータをテストデータと言います。また、このようにデータを分割して評価をすることを交差検証と言います。
交差検証には2種類あります。基本的には事前にデータを訓練データとテストデータに分割するという方法でいいのですが、一方で、(特に全体のデータ数が少ない場合) たまたまテストデータに対する評価がよくなってしまう可能性が高くなります。そういったケースを防ぐために、訓練データ・テストデータの分割を複数回行い、それぞれで学習・評価を行うというアプローチが取られることもあります。前者をホールドアウト検証と言い、後者をk-分割交差検証と言います。それぞれの分割のイメージは図3.8の通りです。
また、訓練データをさらに分割する場合もあります。その際に分割されたデータはそれぞれ訓練データ、検証データと呼びます。すなわち、全データが訓練データ・検証データ・テストデータに分割されることになります。このとき、検証データで一度モデルの評価を行い、そこでモデルの調整をして最終的なモデルを決定、テストデータで再度評価という流れをとることになります。
データを分割して評価するというアプローチが望ましいというのは前述の通りですが、具体的にモデルの良し悪しは何を基準に判断すれば良いでしょうか。例えば分類問題においては予測の「当たり・外れ」が明確に分かりますが、回帰問題は数値そのものを予測するわけですので、「当たり・外れ」を分けることができません。
これを解決する最も単純なアプローチは、予測誤差をそのまま評価に用いることです。一番シンプルな予測誤差を表す値は平均二乗誤差(mean squared error, MSE) でしょう。これは文字通り、対象となる各データの予測値と実際の値との誤差 (差分)をそれぞれ2乗し、総和を求めたものです。2乗することによって正負の誤差が打ち消し合うことを防ぐことができる・微分計算がしやすいなどのメリットがあります。
例えば2つのモデルの性能を比較したい場合、それぞれのモデルでテストデータの平均二乗誤差値を求め、誤差値が小さいほうがより予測性能が高いモデル、という判断ができるわけです。また、平均二乗誤差の他にも、用いる値を小さくするために平均二乗誤差のルートをとった二乗平均平方根誤差(root mean squared error, RMSE)や、2乗の代わりに絶対値をとった平均絶対値誤差(mean absolute error, MAE) などが用いられることもあります。
予測誤差の値はモデルの予測性能をそのまま表しているので、分類問題・回帰問題にかかわらずモデル評価に用いることができます。ただし、実際は前述の通り、予測の「当たり・外れ」をそのまま求めることができない回帰問題において特に用いられることになります。
予測の「当たり・外れ」を明確に分けることができる分類問題においては、「どれくらい予測が当たったか」がモデルの性能評価に用いられることになります。ただし、一口に予測の「当たり・外れ」と言っても、どういうデータに対して予測が当たったか・外れたかでその意味合いは大きく変わってきます。様々なケースを適切に評価できるよう、分類問題においてはいくつかの評価指標が定義されています。簡単な例を用いて各指標の中身を見ていくことにしましょう。
例えば10,000枚のイヌ、オオカミの画像を用いて、別の2,000枚の画像がイヌなのかオオカミなのかを予測する簡単な分類問題を考えてみることにします。すなわち、訓練データ数が10,000枚、テストデータ数が2,000枚ということになります。
このとき、予測値と実際の値は、それぞれイヌ・オオカミとあるので、全組み合わせは3.1のように2×2=4通りあることになります。この組み合わせ表のことを混同行列(confusion matrix) と言います。
| 実際の値\予測値 | イヌ(Positive) | オオカミ(Negative) |
|---|---|---|
| イヌ(Positive) | 真陽性 (True Positive : TP) | 偽陰性 (False Negative : FN) |
| オオカミ(Negative) | 偽陽性 (False Positive : FP) | 真陰性 (True Negative : TN) |
表内の偽陽性、偽陰性のことを、統計用語ではそれぞれ
第一種過誤(type I error)、第二種過誤(type II error)と呼ぶこともあります。
表 3.1 混同行列
この中で、予測が当たっているのは真陽性と真陰性になりますから、普通に考えれば、
$$ \text{正解率} = \frac{\text{真陽性のデータ数 (TP)} + \text{真陰性のデータ数 (TN)}}{\text{全データ数 (TP + TN + FP + FN)}} $$
を求めれば、モデルの評価として適切だと考えられそうです。実際、この指標は正解率 (accuracy) と呼ばれるもので、よく用いられる指標の1つになります。
一方、正解率が適切でない場合もあります。例えば工場で出荷する製品が不良品かどうかを機械学習で識別するとしましょう。不良品は滅多にないはずですから、10,000個の製品の中に3個だけ混ざっているとします。このとき、仮に全部「不良品でない」と予測をすると、9,997個正解することになるので、正解率はなんと99.97%にもなります。 1つも見つけられていないわけですから、全く実用的ではありません。この場合は、「実際に不良品であるもののうち、どれだけ不良品と識別することができたか」を見るのが適切でしょう。
このように、課題に対して機械学習を適用する場合は、何を評価したいのかを明確にしておかなければならない点に注意が必要です。課題ごとに用いられる指標として、代表的なものは次の通りです。
■ 正解率(accuracy)
$$ \text{accuracy} = \frac{TP + TN}{TP + TN + FP + FN} $$
■ 適合率(precision)
$$ \text{precision} = \frac{TP}{TP + FP} $$
■ 再現率(recall)
$$ \text{recall} = \frac{TP}{TP + FN} $$
実際に正であるものの中で、正だと予測できた割合。
$$ \text{F measure} = \frac{2 \times \text{precision} \times \text{recall}}{\text{precision} + \text{recall}} $$
適合率と再現率の調和平均。適合率のみあるいは再現率のみで判断すると、予測が偏っているときも値が高くなってしまうので、F値を用いることも多い。
これらの指標を全部同時に用いて評価するよりも、目的に沿った指標を選択することが重要です。また、いずれの指標を使うにせよ、モデルの性能はテストデータ (および検証データ)を用いて評価・比較するということに注意してください。
例えば正解率で評価するとして、もちろん訓練データに対して正解率を高めることは重要です。正解率が上がらないのであれば、学習ができていないことになります。しかし、訓練データに対して仮に正解率が99%という結果が得られても、テストデータでは50%という結果になってしまっては意味がありません。そこで得られたモデルは、訓練データにのみ最適化されすぎている状態になっているわけです。機械学習の目的は、全データにある共通のパターンを見つけ出すことなので、訓練デー夕にのみ通用するモデルは不適切です。このような状態に陥ってしまうことを過学習もしくは過剰適合 (overfitting、オーパーフィッティング)と言います。
2.2で扱った正解率などとはまた異なった観点でモデルの性能を評価するのがROC曲線(receiver operating
characteristic curve) およびAUC (area under the curve)です。2クラス分類の問題を考える際、例えば3-1の2.2ロジスティック回帰においては、モデルの出力自体は確率で表現されていると説明しました。なので、基本的には0.5を閾値としてモデルの出力を正例 (+1) か負例 (0) かに分類しますが、閾値を0.3や0.7などに変えることによって、予測結果も変化することになります。そこで、この閾値を0から1に変化させていった場合に、予測の当たり外れがどのように変化していくのかを表したものがROC曲線となります。
ROC曲線を理解するために、2.2で出てきた混同行列の値を用いて、下式で表されるTPR, FPRを定義します (TPR, FPRはそれぞれTrue Positive Rate, False Positive Rateの略です)。
$$ \text{TPR} = \frac{TP}{TP + FN} $$
$$ \text{FPR} = \frac{FP}{FP + TN} $$
ここで、TPRは再現率 (recall) と同じであることに注意してください。
ROC曲線は、横軸にFPR、縦軸にTPRを取り、閾値を0から1に変化させていった際の両者の値をプロットしていったものを指し、一般的(理想的)には図3.9のような形となります。ただし、この曲線の形はモデルの性能によって大きく変化し、もしモデルが全く予測ができない (ランダム予測と同じ)ならば、ROC曲線は図の点線部分と一致します。一方、もしすべてのデータを完全に予測することができるならば、ROC曲線は図の正方形の左上2辺と一致することになります。
このように、ROC曲線は視覚的にモデル性能を捉えることができる指標となります。また、ROC曲線より下部の面積のことをAUCと呼びます。これにより、AUCがりに近いほどモデル性能が高いことを表すことになり、視覚的だけでなく、数値としてもモデル性能を評価できることになります。
あるタスクを機械学習のモデルで解きたいというとき、「どんなモデルを使えば適切に予測ができるのか」については実験してみるまでは分かりませんが、「どんなモデルを試せるのか」に関しては多くの選択肢があります。手法も様々存在しますし、同じ手法の中でも、例えば決定木の深さを変えるなど、モデルの複雑さも様々調整ができます。
モデルを複雑にすればするほど複雑な表現ができる、すなわち難しいタスクも予測ができる可能性はあるわけですが、逆にいうと、表現しなくても良いノイズ部分まで表現してしまう(過学習してしまう)可能性もあるので、一概に複雑にすれば良いかと言われると、必ずしもそうではありません。また、モデルが複雑になればなるほど、学習に必要な計算コストも増えてしまうので、「ある事柄を説明するためには、必要以上に多くを仮定するべきでない」という指針を表すオッカムの剃刀 (Occam's razor / Ockham's razor) に従うのが望ましいと言えます。
では解きたいタスクに対して実際にモデルをどれくらい複雑にすれば良いのかは難しい問題ではありますが、この問いに対してひとつの目安となるのが統計分野でも用いられる情報量基準という指標になります。情報量基準には赤池情報量基準(Akaike's Information Criterion, AIC)とベイズ情報量基準(Bayesian Information Criterion, BIC)の2種類がありますが、どちらをどういった時に用いるのかについては明確な線引きはありません。いずれの指標もモデルのパラメータ数が大きすぎる場合にペナルティが課されるような数式となっており、基本的にはバラメータ数が一定範囲内にあるモデルを良しとする基準となっていますが、BICに関してはデータ数が大きい場合に、よりペナルティ項の影響が大きくなってくるという特徴を持っています。
以下の文章を読み、空欄に最もよく当てはまるものを1つ選べ。
ブースティングは複数の弱分類器を組み合わせて1つの分類器を構築する()の手法の1つである。
2
機械学習の手法の位置付けを問う問題です。バギングもアンサンブル学習の手法の1つです。
以下の文章を読み、空欄 (A) (B) に最もよく当てはまるものを1つ選べ。
サポートベクターマシン (SVM) において、データを (A) 空間に写像することで、写像後の空間で線形分類を行えるようにするという方法が取られる。その際に用いられる関数のことを (B) 関数という。
1
機械学習手法の1つであるSVMの理解を問う問題です。カーネル関数を用いてデータを高次元空間に写像するのが非線形のSVMの特徴です。
バギングに関する説明として、最も適切なものを1つ選べ。
2
機械学習手法の1つであるバギングの理解を問う問題です。バギングはアンサンブル学習に位置付けられるので、複数のモデルの出力を利用するのが特長です。
複数の決定木を用意し、訓練データをランダムに振り分けて、アンサンブル学習を行う学習手法として、最も適切なものを1つ選べ。
3
機械学習手法の1つであるランダムフォレストの理解を問う問題です。ランダムフォレストもアンサンブル学習に位置付けられます。
回帰問題や分類問題に関する説明として、最も適切なものを1つ選べ。
1
多クラス分類にはソフトマックス関数を用います。2個分類の場合にロジスティック回帰、回帰問題の場合に線形回帰またはリッジ回帰を用います。
自己回帰モデル(AR) による分析対象例として、最も適切なものを1つ選べ。
1
自己回帰モデルについての理解を問う問題です。ARは過去のデータを用いて現在にデータを回帰する時系列データの予測に用いることができます。
教師なし学習の手法の中で、入力データの構造や特徴をつかむためにクラスタごとに重心を求め、各データを最も近いクラスタに紐付ける作業を繰り返しあらかじめ決められた数のクラスタにデータを分類する手法の名称として、最も適切なものを1つ選べ。
3
クラスタリング手法についての理解を問う問題です。あらかじめ決めたk個のクラスタを作るために重心を求めて紐づけるのがk-means法の特長です。
サンプル同士の類似度をもとに、それらを複数のグループに分割する手法がある。この手法の特徴は、正解ラベルが付与されていないデータでも利用することができ、ビジネスにおける顧客のセグメンテーションなど、データマイニングの領域で広く利用される。サンプル同士の類似度をもとに、それらを複数のグループに分割する手法の名称として、最も適切なものを1つ選べ。
3
クラスタリングについての理解を問う問題です。クラスタリングがどのような処理であるか理解しましょう。
階層的クラスタリングにおいて、クラスタが形成されていく様子を木構造で表現した図の名称として、最も適切なものを1つ選べ。
1
クラスタリング手法についての理解を問う問題です。木構造で表現した樹形図のようなクラスタを形成するのがデンドログラムの特徴です。
レコメンデーションに関する以下の文章を読み、空欄(A) ~ (C) に最もよく当てはまるものを1つ選べ。
(A)は、ECサイト等でユーザーの購買履歴をもとに好みを分析し、興味がありそうな商品をおすすめする手法である。 (A)は、事前にある程度の参考になるデータがない場合に推薦を行うことができない。これを (B) と言う。(C)は、ユーザーではなく、商品側に何かしらの特徴量を付与し、特徴が似ている商品を推奨する。(C)は、対象ユーザーのデータさえあれば推薦を行うことができるので、(B)を回避することができる。
2
協フィルタリングについての理解を問う問題です。コールドスタート問題は重要な問題なので、どのように回避するかを含めて理解しましょう。
Q学習について述べたものとして、最も適切なものを1つ選べ。
1
Q学習の理解を問う問題です。Q学習は価値反復法ペースの手法であり、方策オフ型の学習手法です。
強化学習は、マルコフ決定過程として定式化される。この場合のマルコフ性とは、どのような意味で用いられるか。過去、現在、未来の各状態の関係を記述した選択肢の中から、マルコフ決定過程を適切に記述していると考えられる最も適切なものを1つ選べ。
1
マルコフ決定過程の理解を問う問題です。特にマルコフ性は重要となるので理解しましょう。
機械学習における検証手法の1つであるk-分割交差検証は、どのようなときに用いると効果的か。最も適切なものを1つ選べ。
4
機械学習モデルを検証する方法を理解する問題です。k・分割交差検証は、データセットに含まれるデータ件数が少ないときに効果的です。