目次
はじめに
てくますプロジェクトでは、てくますゼミと呼ばれる学習会を開催しています。
少人数であーだこーだ議論しながら、考える楽しさを分かち合うことを大切にしています。
現在は「AIエンジニアを目指す人のための機械学習入門」という本を読み進めています。
今回は本書第4回の輪読会ということで、2.8〜3.2を読み進めました!
本記事では、今回の勉強会で学んだことをざっくりと紹介していきます。
学習内容
Naive Bayes
Naive Bayesは教師あり学習の一つで、ベイズの定理を土台としたアルゴリズムです。これを用いることで、テキストデータの分類を行うことができます。
ベイズの定理 \(p(θ|D)=\displaystyle\frac{p(θ)p(D|θ)}{p(D)}\)
\(p(θ)\) は \(θ\) が発生する確率で、事前確率と呼びます。これに対し、\(p(θ|D)\) は条件 \(D\) が与えられたもとで \(θ\) が発生する条件付き確率で、事後確率と呼びます。
ある事象が起きる確率が、情報を得ることで更新されるイメージを持っておくとよいでしょう。
例えば、病気Aに感染している確率は通常3%ですが、検査で陽性になったという情報を得たことで、感染している確率が60%に更新されたといった感じです。更新前が事前確率、更新後が事後確率にあたります。
さて、Naive Bayesにおいて、ベイズの定理の式は次のようになります。
\(p(Category|Text)=\displaystyle\frac{p(Category)p(Text|Category)}{p(Text)}\)
テキストが与えられたという条件をもとに各カテゴリーの発生確率を調べることで、そのテキストがどのカテゴリーに分類するか決めます。
どのカテゴリーでも分母の \(p(Text)\) は同じ値となるので、分子のみ計算すればよいです。
\(p(Category)\)はカテゴリの出現確率です。これは、訓練データにおける、全テキストに対してそのカテゴリのテキストが占める割合として計算できます。
\(p(Text|Category)\)はカテゴリを固定したときに分類対象のテキストが生成される確率です。
テキスト中の各単語がそれぞれテキストに独立に出現すると仮定すると、次のように書き換えることができます。(この独立性の仮定が、Naive BayesのNaive(単純)と言われる所以です)
\(p(Text|Category)=\prod_{i=1}^K p(word_i|Category)\)
\(p(word_i|Category)\) は、訓練データのそのカテゴリーにおける、全単語の出現回数に対して \(word_i\) の出現回数が占める割合として計算できます。
以上により、各カテゴリーにおける分子が計算できました。
そのうち最も値が大きいカテゴリーにテキストを分類すれば OK です!
テキストでは、ニュース記事を20種類のカテゴリーに分類するモデルを作成しました。
教師なし学習
ここまで見てきたアルゴリズム(線形回帰、ロジスティック回帰、SVC、決定木、ランダムフォレスト、Naive Bayes)はいずれも教師あり学習でした。
ここからは教師なし学習について学んでいきます。教師なし学習では、正解の付いていないデータセットから、データの背後にある傾向を学習します。主にクラスタリングや次元圧縮といったタスクがあります。
主成分分析
主成分分析は教師なし学習の一つで、次元圧縮を行うことができます。次元圧縮とは、入力データの説明変数の数を少なくすることです。
なぜ、変数の数を減らしたいかというと、データの次元数が増えると、機械学習の様々なアルゴリズムの性能が低下するためです。これを次元の呪いと呼びます。
しかし、変数を削るということは、もとよりも情報量が減ることを意味します。なるべく情報量を減らさずに、変数の数を減らしたいです。
身長と体重の 2 変数データを考えましょう。これらの 2 変数の間には正の相関関係があります。つまり、身長の情報はある程度、体重の情報も含んでいるということです。それなら身長・体重ではなく、体格のような 1 変数で表せないかと考えます。
主成分分析では、データの各変数の間の相関をなくすように変数変換をします。
そのようにして新たに作成した軸が、下図の黒い直線の軸です。この軸は、体格のようなものを表す変数の軸です。
体格の 1 変数に削減すると、黒い直線の軸と垂直な方向の情報は切り捨てられます。
寄与率と呼ばれるものを計算すると、今回の場合、体格の 1 変数でもとの情報の約 8 割は説明できることが分かります。しかし、残り約 2 割の情報は切り捨てられます。
主成分分析で次元圧縮する際は、もとの情報の何割は保持しておきたいかをもとに、どの程度、変数を削減するか決めましょう。
さて、主成分分析のアルゴリズムは以下となります。
- 分散共分散行列 \( S_X^2 \)を求める
分散共分散行列とは、各変数の分散と共分散を並べた行列です。
\( S_X^2 =\begin{pmatrix} S_{x_1}^2 & S_{x_1x_2}^2 \\ S_{x_1x_2}^2 & S_{x_2}^2 \end{pmatrix}\) - \( S_X^2 \) を対角化する
\( S_X^2\) の固有ベクトルを並べた行列を \(P\) とすると、
\( P^-1S_X^2P = \begin{pmatrix} λ_1 & 0 \\ 0 & λ_2 \end{pmatrix}\) と対角化できます。 - 行列 \(P\) を用いて、変数 \( x_1,x_2 \) を \( y_1,y_2 \) に変換する
\(( y_1,y_2) = P(x_1,x_2)\) - 寄与率をもとに、次元圧縮を行う
全固有値の合計のうち \(λ_1\) が占める割合が \( y_1\) の寄与率となり、\(λ_2\) が占める割合が \( y_2\) の寄与率となります。この寄与率をもとに、どの変数を削減するか決めます。
最後に
今回はゼミの参加者が 5 名でした! 人数が増えて活気も出てきて、嬉しい限りです。
主成分分析では、学生時代に学んだ行列の対角化が出てきて、対角化はこのようなところで使うのかと驚きました。
さて、次回も引き続き、教師なし学習について学んでいきます。
では、また!