2019年7月アーカイブ

回帰分析とは

先ず回帰分析とは、あるp個の変数Alt 最小二乗法が与えられた時、それと相関関係のあるyの値を説明、予測することである。ここで変数xを 説明変数 、変数yを 目的変数と呼ぶ。p=1、つまり説明変数が1つの時を単回帰、またp>=2、つまり説明変数が2つ以上の時を重回帰と呼ぶ。

単回帰分析

今回はp=1と置いた 単回帰分析 について説明する。

このとき、回帰式は y=ax+b(a,bは 回帰係数 と呼ばれる)となり直線の形でyの値を近似(予測)できる。

単回帰分析のデメリットとして知りたいデータを直線で近似してしまうため、精度が良くないと得られるデータに大きな誤差が生じてしまう。

しかしデータのおおよその値が視覚的に分かるため、データの大概を掴むことができ非常に便利な分析手法の1つである。

例として、ある店舗での来店者数(来場者数)について興味を持ったとしよう。ここで広告費(宣伝費)と来場者数について以下のような散布図が得られたとする。

Alt text

この散布図を見ると、グラフに弱い人でも「宣伝費が高ければ来場者数が増える」と読み取れるだろう。

そこでパラメータa,bをうまく決定し( 最小二乗法 による)、下図のように直線を引けたとしよう。

Alt text

グラフからも分かるようにデータは正しい値を取るわけではない、つまり厳密に最小二乗法とはならないことに留意せよ。

そこで後で説明する最小二乗法によって、パラメータa,bをうまく決定するのである。

最小二乗法

最小二乗法とは、誤差を伴う測定値の処理において、その誤差(残差)の二乗の和を最小にすることで最も確からしい関係式を求めることである。

Alt text

プロットされた各点(xi, yi)における回帰式( y=ax+b)との残差の和が最小となるようにパラメータa,bを決定したい。

回帰式 y=ax+b にi番目のxの値を代入して得られるy(予測値)を、

最小二乗法

とする。

そこでi番目のデータについての残差(実測値と予測値との差)をε_iと置くと、

最小二乗法

となる。このままだと残差の符号にばらつきが出るため扱いづらい。そこで残差の2乗和について考える。(サンプルサイズはnとしている)

最小二乗法

この式はパラメータ(a,b)の関数であり、最小二乗法によりこの残差の二乗和が最小となるようなパラメータ(a,b)を求める。

最小化の一階条件として上式をa,bでそれぞれ偏微分した値が0となる性質がある。先ず偏微分すると、

最小二乗法

最小二乗法

これより一階条件は、

最小二乗法

最小二乗法

となる。一般的にこの二本の方程式は 回帰の 正規方程式 と呼ばれている。

二本目の式より、最小二乗法を得るので、

最小二乗法

となる。これより、

最小二乗法

を得るが、これより y=ax+b が定点最小二乗法を通ることがわかる。

改めて、中心化した変数及びデータ、

最小二乗法

を用いると、

最小二乗法

最小二乗法

然るに、残差平方和をbを含まない式に書き換えることができる。

最小二乗法

よってaで偏微分して、残差平方和を最小にするaを求める。これをAlt textと書くことにする。

最小二乗法

最小二乗法

が得られたことになる。

決定係数

次に、求めたパラメータa,bに対して、目的変数yが説明変数xによってどれだけ説明されているかを検証してみる。

モデルの当てはまりが悪ければ、説明変数を追加するなどして、モデルを改良するための一つのインデックスとなる。

今回は、モデルの当てはまりの良さを表す指標の一つとして、 決定係数 を導出する。

決定係数とは、上で導出したパラメータa,bを持つ回帰式の精度を表す値である。

一般に決定係数は、

最小二乗法

で定義される。第二項の分母は全変動と呼ばれ、データそのもののばらつき具合を表しており、分子は残差変動と呼ばれ、回帰モデルと実測値とのズレを表している。

即ち、決定係数が1に近いほど残差変動が小さいということであり、良い予測が出来ていると判断される。

関連するTheoremとして、「最小二乗法による直線フィッティングの場合、相関係数の二乗と決定係数は一致する」というものがある。

今回はこの証明は割愛するが、 こちらのサイト から是非確認してほしい。

参考文献

最小二乗法の意味と計算方法 - 回帰直線の求め方

線形回帰分析入門〜最小二乗法から決定係数まで

LSTM(Long Short Term Memory)は音声認識など、様々な場面で使われるモデルなのですが、意外と歴史のあるモデルでもあります。今はattention等に押されている感はありますが、通常のRNNを大きく改善したと呼ばれる、学ぶ価値のあるモデルです。ここでは、RNNとの違い、実際の仕組みを解説していきたいと思います。

1 RNN

LSTMはRNNの一種ですが、通常のRNNが情報をそのまま次に引き継ぐのに対し、LSTMでは中間層を噛ませて次に渡しています。

Alt text

従来のRNNは、一度データを通して得た情報を、次のインプットと一緒に後続に渡す仕組みでした。

Alt text

Long Short-Term Memoryより引用。

しかしこのモデルでは、長期依存性の問題があります。昔の情報を現在まで保持するのが難しいため、文章などのデータを適切に処理できないのです。関連する情報とそれが必要になる場面が離れていれば離れているほど、RNNはこれらを上手く繋げることができないのです。

Alt text

Long Short-Term Memoryより引用。

LSTMはこの問題を解決するために開発されました。

2 LSTMの仕組み

では、LSTMの具体的な仕組みについて解説していきます。以下に二種類の図がありますが、この二つの図が同じものを表していることがわかるでしょうか。これがわかれば、今回の目標は半分達成です。

Alt text

Long Short-Term Memoryより引用。

Alt text

これらの図は、1999年に開発されたバージョンで、chainerのLSTMに実装されているものです。

ではステップごとに見ていきましょう。この順番は便宜上のものであり、計算が前後しても大丈夫な部分もありますが、例えばOutput Gateに必要なインプットはForget GateとInput Gateで計算されるので、そういった部分は順番に注意する必要があります。

2-1 Forget Gate

一つ目の部品は、Forget Gateと呼ばれる、文字どおり「忘れる」ためのゲートです。これは実は1997年のオリジナルのLSTMモデルにはない部分で、インプットが大きく変わる際、一度メモリセルで記憶した内容を一気に「忘れる」ことを学習します。

一つ目の図で言うと、下図のようになります。

Alt text

Long Short-Term Memoryより引用。

二つ目の図では、

Alt text

Long Short-Term Memoryより引用。

という式によって表現されています。(とりあえずp_forの項は無視してください)

2-2 Input Gate

二つ目のステップは、その段階の新しいインプット(xt)を処理するゲートです。古いリカーリングインプット(y{t-1})と新しいインプット(xt)をそれぞれシグモイド関数とtanh関数にかけ、XORすることで、新たな候補値のベクトル(C^~t)を計算します。そして、この新たな候補値を、forget gateに古い候補値(C_{t-1})をかけたものに足します。

一つ目の図で言うと、

Alt text

Alt text

Long Short-Term Memoryより引用。

二つ目の図で言うと、

Alt text

Alt text

Alt text

になります。

少しややこしくなりますが、最後の式を見ると、インプットを処理して得たCに、古いCの中でforget gateが残すべきと判断したものを足し合わせる、という仕組みになっていることがわかります。

2-3 Output Gate

最後のデートは、出力を処理するためのゲートです。他のゲートと同様にインプットをシグモイド処理した後で、セル状態(C_t)をtanh関数で処理したものと掛け合わせる構造になっています。

一つ目の図でいうと、

Alt text

Long Short-Term Memoryより引用。

二つ目の図で言うと、

Alt text

Alt text

になります。

LSTMは、主にこの3種類のゲートで成り立っています。一つ一つのゲートにおける仕組みは、図や式で表現されている通りですが、今一度まとめると、

LSTMの特徴は

・y_{t-1}という古いアウトプットを次の段階でインプットとして使用する、というRNNの構造を保ちつつ

・C_{t-1}という長期記憶を少しずつ変えていく

という2点で、それを

・Forget Gate(古いC_{t-1}のうちどの部分を忘れるか)

・Input Gate(新しいインプットと一つ前のアウトプットを組み込む)

・Output Gate(更新された長期記憶を再度処理してアウトプットを作る)

の3つのゲートで管理しています。

ここで疑問となるのが、

なんで入力と出力にややこしいゲートがあるの?

という点です。必要以上にややこしいというのは、その通りです。しかし、これには理由があります。

2-4 入力ゲートと出力ゲートの意味

実は、このややこしいゲートは重みを上手く調節するために存在しています。一般的なRNNでは、ユニットiからの出力が重みw_{ij}をつけてユニットjに入力されます。しかし、時系列データを使うと従来の方法ではこの重みが相反する2つの作用によって上手く更新されない、そのような事態が起きていました。具体的には

・ユニットを活性化されることによる入力/出力信号の伝達

・ユニットからの無関係な入力/出力によってユニットが消去されることを防ぐを入力/出力信号の保護

の二つの更新が同時に行われる場合があるのです。これを防ぐために、一見ややこしく不必要な入力ゲート・出力ゲートがLSTMに付けられているのです。

2-5 様々なLSTM

LSTMにも様々なバージョンがあり、実際には仕様によって少しづつ違います。その中でも比較的重要なものを一つご紹介したいと思います。

上でも記したように、LSTMは「忘却する・入力する・出力する」という3つのゲートで成り立っています。しかし、制御対象であるメモリセルの内部状態(C_t)それ自体は制御に使用されていませんでした。そこで、peephole connectionと呼ばれる接続を各ゲートに流し込むことで解決を図りました。

Alt text

上の図の青い線がpeephole connectionにあたります。ご覧の通り、各ゲートに青い線でメモリセルの内部状態(C_t)が流れ込んでいるのがわかると思います。上の式で説明されていなかった項の正体は実はこのpeephole connectionです。

(もっと知りたい人向け)

・LSTMのBack Propagation (逆伝播)

・Gradient Clipping

・Constant Error Carousel (CEC)

参考文献:

LSTMネットワークの概要

わかるLSTM ~ 最近の動向と共に

Long Short-Term Memory


ここでは今は去りしデータマイニングブームで頻繁に活用されていた決定木について説明する。理論的な側面もするが、概念は理解しやすい部類であるので参考にしていただければと思う。

1 決定木(Decision Tree)

決定木とは木構造を用いて分類や回帰を行う機械学習の手法の一つで段階的にある事項のデータを分析、分離することで、目標値に関する推定結果を返すという方式である。データが木構造のように分岐している出力結果の様子から「決定木」との由来である。用途としては「意思決定のためのデータモデリング」「機械学習としての予測への活用」が挙げられる。

Decision_tree_model_ja.png

また、決定木の構成方法には、ボトムアップ的な方法とトップダウン的な方法の2種類がある。前者はある学習データを正しく判別するための識別ルール(条件式)を作成してその制約を緩めながら他の学習データも正しく判別するためのルールを汎化していく方法である。一方で後者は根ノードでできるだけ誤りの少ないように分割するルールを求めて、その後のノードでも同様に2分割するルールを次々と求めていき成長させる方法であり、分割統治法と呼ばれる。ここでは主流となっているトップダウン的な方法について記載していく。

トップダウン的な方法で決定木を構成するためには、次の要素について考える必要がある

  1. 各ノードにおける特徴軸と閾値の選択
  2. 終端ノードの決定(学習データがすべて分割されるかその前に止めるのか、また木の選定を行う)
  3. 終端ノードに対する多数決でのクラスの割り当て

ここでトップダウン的な方法で学習する代表的な方式は3つあり(CART、ID3、C4.5)、中でも今回説明するCARTは以下の2つに大別される。

  • 分類木(Classification Tree)→対象を分類する問題を解く(分類カテゴリーは2つ)(例:性別(男/女)、試合の結果(勝ち/負け)の判別)
  • 回帰木(Regression Tree)→対象の数値を推定する問題を解く(例: 住宅の価格の見積り、患者の入院期間の見積りなど)

分類木(Classification Tree)

分類木は1つまたは複数の測定値から、あるデータがどのクラスに属しているのかを予測するために使用される。主にデータマイニングに利用されている技術である。データをパーティションに分割してから、各ブランチに更に分割するというプロセスを反復する。最終的にどのクラスに分類されたのかの判別は、終端ノードで行う。

○具体例

今回は購入者(Puchaser)と非購入者(Non-Puchaser)を分類する分類木を例に挙げる。先ず、各データについて分類ラベル(Puchaser/Non-Puchaser)が事前に分類されているデータセットを用意する。次に2つのノードに対してある条件式を元に各データを割り当てる。(図ではincome<=$75,000かincome>$75,000で判定)その後、次のノードに割り当てる際にも別の条件を元に分割を適用していく。この分割の操作はこれ以上有用な分割ができなくなるまで行われる。(木の成長は以下の説明「木の剪定」、分割方法は「不順度」にて説明)

Classification Tree.png

回帰木(Regression tree)

矩形内で一定の推定量をとる回帰関数である。 矩形は,(標準的な) ヒストグラム の場合とは異なり,その大きさが同じである必要はない。 回帰木は,ルールを2 分木として表現できるという独特の特徴がある。この特徴により,多くの説明変数がある場合にも推定値のグラフ表現を可能にする.

1.1 決定木の各種定義

tree.png

上図のノード全てに対して幅優先順(breadth first)で1からナンバリングして(これをノード番号とする)0でない整数の集合をTとする。またleft()、right()をそれぞれ2分岐したときの左側、右側のノード番号を与える関数とすると次の2つの性質を満たす。

  1. 木Tに属する各ノードtについて、left(t)=right(t)=0(終端ノード)か、left(t)>t,right(t)>t(非終端ノード)のどちらかを満たす
  2. 木Tに属する各ノードtについて、根ノードを除いてt=left(s)もしくはt=right(s)のどちらかを満たすsが一つ存在する。ここでsを親ノード、tを子ノードといい、s=parent(t)で表す。

ざっくりと説明すると木を構成するノードはどのクラスに割り当てるかを決める終端ノードとそれ以外の非終端ノードによって構成され、非終端ノードの分割先は多くても左側と右側に一つしか作成されず他のノードと合流することはないという意味である。

上記でも説明したようにノードのナンバリングは幅優先で行うため、right(t)=left(t)+1が成り立つ。またtからsへの一意のパスの長さをl(s,t)=mで定義する。

木Tの終端ノードの集合をmath-20190705.pngとすると、差集合math-20190705 (1).pngが非終端ノードの集合となる。

またTの部分集合をmath-20190705 (13).pngとし、以下の式との組み合わせが木となる場合に部分木となる。

math-20190705 (2).png

わかりやすいように上の図を使って説明をすると、math-20190705 (13).png={2,4,5}は上記式を満たすので、Tの部分木となる。一方でmath-20190705 (13).png={2,4,5,3,6,7}は親がいないため、部分木とはならない。また、部分木の根ノードがTの根ノードと等しい場合はmath-20190705 (13).png剪定された部分木と呼ぶ。また任意のtとその子孫全てで構成される部分木を分枝と呼ぶ。

各終端ノードはそれぞれ一つの分割領域u(t)に属する。決定木では、各領域u(t)に特定のクラスを割り当てることで、入力データのクラス分類を行う。ここでクラスをmath-20190705 (14).pngとしたときに、終端ノードが表すクラスの事後確率を以下のように計算する。

クラスラベルのついた学習データ集合をmath-20190705 (3).pngとする。(木のノードと混ざりやすいが添字がついている方を学習データとする)クラスjに属する学習データ数をmath-20190705 (4).pngとすると、クラスjの事前確率

math-20190705 (5).png

となる。特徴空間はノードで分割ルールを経るごとに分割されていく。あるノードtに属する学習データの数をN(t)とし、j番目のクラスに属するデータをmath-20190705 (6).pngとする。必ず一つのクラスに属するのでmath-20190705 (7).png

となる。j番目のクラスの学習データがノードtに属する確率が

math-20190705 (8).png

であることからそれらすべての同時確率

math-20190705 (11).png

となる。上記式より周辺確率は、

math-20190705 (9).png

となるので、tにおけるj番目のクラスの事後確率は、

math-20190705 (10).png

となる。よってノードtにおけるクラスの識別は上記式の事後確率が最大となるクラスを選択すれば良いので

math-20190705 (12).png

となる。

1.2 ノードの分割ルール(不順度)

各ノードにおいて最も推定精度を向上させるための分割方法は、不順度と呼ばれる評価関数で評価することで選択する。学習データがN個であれば、N-1個の分割候補点がある。また、となり合った2点間の中間を候補点の一つとすれば、それはカテゴリー数だけ存在する。これらの中で選択される候補点は以下の式で計算される不順度に基づいて決定する。

○計算方法

ここであるノードtにおける不順度をI(t)とすると

math-20190723 (7).png

ただし、math-201907011.png

math-201907012.png:クラスiに属するトレーニングサンプルの総数

N:トレーニングサンプルの総数

ここで、上記関数math-201907014.pngmath-201907015.pngに対して次の3つの性質を満たす。

  • math-201907016.pngは、すべてのiに対してmath-201907017.pngのとき(どのクラスの事後確率も一様に等しい)最大になる。
  • math-201907016.pngは、あるiについてmath-201907018.pngのみを満たすとき、(ただ一つのクラスに定まる)最小になる。
  • math-201907016.pngは、math-201907019.pngに関して対象である。

代表的な不順度

ノードtにおける誤り率(error rate)

math-20190723 (6).png

交差エントロピー、逸脱度(deviance)

math-20190723 (5).png

ジニ係数(Gini index)

math-20190723 (4).png

以上の①〜③のいづれかの方法を用いて不順度を計算し、不順度の減り方(勾配)が最も大きな分割を選択する。

特に③のジニ係数はCARTで用いられることが推奨されている(参考文献[4]より)。ノードtでi番目のクラスのデータが選ばれる確率とそれ以外のクラスに間違われる確率の積をすべて足し合わせる式となっているため、ノードtにおける誤り率となっている。この誤り率の減り方(勾配の計算で求める)が最大となる分割点を分割可能なすべての候補点の中から選択すれば良い。

1.3 木の剪定

剪定とは作成された木構造の一部分を削ることで木構造を簡易化して汎用性を保つ方法である。決定木は訓練データに基づいており、学習と分割が進みすぎると木が成長しすぎてしまい汎用性が低下してしまう。(学習データを判定する際に全く通用しなくなってしまう可能性が高くなる)そのため、決定木を作成する際には、推定精度が高く、かつ汎化性を保った木を作成するためには、ある程度の深さで木の成長を止めることが必要である。

○計算方法

木を構成した学習アルゴリズムに対して再代入誤り率を計算する。

終端ノードmath-20190708 (4).pngにおける誤り率は

math-20190708 (2).png

M(t):終端ノードtにおける誤り数

N:総学習データ数

となる。(この誤り率は前節のジニ係数や逸脱度の値を用いても良い)

したがって木全体(終端ノードすべて)の再代入誤り率の推定値は、

math-2019070116.png

となる。

木構造の複雑さを終端ノードの数と再代入誤り率で評価する。

ある終端ノードにおける誤り率と複雑さのコストの和

math-2019070117.png

math-2019070118.png:一つの終端ノードがあることによる複雑さのコスト(正規化パラメータ)

したがって木全体のコストは、

math-20190708 (3).png

となる。この値が最小となるよう終端ノード数を調整する。しかしながら終端ノードが多くなるほど誤り率R(T)が高くなり逆に終端ノード数が減るほど誤り率が低くなる。そこでこの複雑さのコストが2つの要素の間のバランスを取る正規化パラメータ(調整パラメータでもある) の役割を果たしている。例えばこの値が小さくなると終端ノードを増やす方向に向かうため、大きな木が好まれる。

ノードtにおける再代入誤り率は、最大事後確率で決まるため、前節のノードtにおける誤り率と同じになる。つまり、

math-20190708 (5).png

である。またノードtに学習データが属する確率をp(t)とすれば、

math-20190708 (6).png

と書くことができる。

あるノードtを根ノードとする分枝(tのすべての子孫で構成される部分木のこと)をmath-20190708 (7).pngとする。もし、math-20190708 (8).pngならばtを終端ノードとしたときの木のコストより分枝を持っている方が小さいということになるので、分枝を残したほうが全体のコストは小さくなる。しかし、正規化パラメータの値を大きくするにつれて誤り率と複雑さのコストの値が等しくなり、その値は

math-20190708 (9).png

で与えられる。つまり、ノードtを残そうが剪定しようがコストは変わらないので、木が小さくなる方を優先するとして選定してしまって良いことになる。そこで、この正規化パラメータをtの関数とみなして

math-20190708 (10).png

と定義する。木の剪定はすべてのノードに対してこの値を計算し、

math-20190708 (11).png

とする。最小値をとるすべてのノードを終端ノードとし、その子孫を削除して木を剪定する。この操作を根ノードのみになるまで行う。

以上が剪定アルゴリズムであるが、再代入誤り率は剪定を進めるほど大きくなるため、どこで止めるべきかの情報が与えられていない。そのための基準を設ける必要があるがその方法としてホールドアウト法や交差確認法がある。しかしながらこれらは明確な基準値が設けられているわけではなく経験的にルールを設定することで基準作りを行っている。

2 応用

2.1 バギング(bagging)

bagging.png

複数の決定木を組み合わせる方法の一つとしてバギングがある。Bootstrap AGGregatINGから派生しており、学習データのブートストラップサンプルを用いて複数の木で学習させ、それらの木で求めた結果に基づいて多数決で決定するという方法である。ブートストラップサンプルは学習データから重複を許したサンプリング(普通は学習データの数と同じだけ)を行い、新たな学習データを作製する、といった作業を木の数だけ繰り返す手法である。それぞれの木の判別性能はランダム識別より少し良ければ良いので弱識別器と呼ばれる。一つの決定木だけだと学習データに識別性能が大きく依存してしまうが、複数の結果の多数決を取ることでより安定で性能の良い判別器を構成することができる。一方でそれぞれの弱識別器はブートストラップサンプルに依存した性能であり、相関が高い性能になってしまうと、並列させるメリットが薄まってしまう。このような欠点を補うのが次節で説明するブースティングランダムフォレストである。

2.2 ブースティング(boosting)

adaptive_boosting.png

バギングは複数の弱識別器を並列に学習させていくが、ブースティングは直列的にし、前の弱識別器の学習結果を参考にしながら一つずつ弱識別器を学習する方法である。学習データは次の弱識別器にとって最も有益なものが選択される。代表的なブースティングアルゴリズムにアダブースト(adaptive boositng)がある。アダブーストは弱識別器の学習結果に従って学習データに重み付けが行われ、誤った学習データに対する重みを大きくして、正しく判別された学習データに対する重みを小さくすることで、後に学習識別器ほど、誤りの多い学習データに集中して学習するようにする方法である。

学習アルゴリズム

学習データ、教師データ、重み、弱識別器をそれぞれmath-201907080.png,math-201907081.png,math-201907082.png,math-201907083.png,math-201907084.pngとする。このときアダブーストのアルゴリズムは以下のようになる。

(1)重みをmath-201907085.pngに初期化する。

(2)math-201907086.pngについて以下を繰り返す

  (a)識別器math-201907087.pngを重み付け誤差関数

     math-201907088.png

     が最小となるように学習する。math-201907089.pngは識別関数の出力が一致した場合0、一致しなかった場合1となる指示関数である。

  (b)識別器math-201907087.pngに対する重みmath-2019070810.pngを計算する。

    math-2019070811.png

  (c)重みを次のように更新する。

     math-2019070812.png

(3)入力xに対する識別結果を、

   math-2019070813.png

   に従って出力する。ただし、sign(a)は符号関数でありa>0なら+1、a=0なら0、a<0なら-1を出力する。(多数決)

(2)(a)は誤った学習データの正規化された重みの和である。これは誤差が小さいほど大きな値を取る。したがって誤りの小さなmath-201907087.pngに大きな重みを与える。また重みの更新では、誤った学習データの重みがexpmath-2019070810.png倍される。正しく判別されると重み付けはされないが、先程の(2)(a)の式で正規化されるため、相対的に小さくなっていく。また、弱識別器の数Mは多すぎると過学習が生じてしまうので、木の選定と同様に交差検証法などで選ぶ必要がある。

2.3 ランダムフォレスト(random forests)

randomforest.png

バギングは前節で説明したように、決定木のような分散が大きな識別器に適した方法であるが、ブートストラップサンプリングによるため生成された決定木の相関が高くなってしまう。一般的に、分散math-2019070814.pngを持つM個の独立な確率変数math-2019070815.pngの平均

math-2019070816.png

の分散は

math-2019070817.png

であるが、2つの間に正の相関がある確率変数の場合には、平均の分散は、

math-2019070819.png

サンプル数Mを多くすれば上記式の第一項は無視できるが第2項は変化しない。ランダムフォレストはこの第2項のmath-2019070818.pngを減少させる仕組みを取り入れたバギング手法の一種である。決定木の各非終端ノードにて判別に用いる特徴をランダムの個数選択することで、相関の低い多様な決定木が生成されるようになっている。

学習アルゴリズム

(1)について以下を繰り返す

   (a)N個のd次元学習データ(入力データx)からブートストラップサンプルmath-2019070820.pngを生成する。

   (b)math-2019070820.pngを学習データとして、以下(ⅰ) 〜(ⅲ)の手順によって各非終端ノードtを分割して決定木math-2019070821.pngを成長させる。

      (ⅰ)d個の特徴からランダム個数d'を選択する。(一般的には平方根を四捨五入した個数が望ましいが問題によって最適は異なるので都度調整したほうが良い)

      (ⅱ)d'個の中から、最適な分割を与える特徴(ランダム)と分割点を求める(不順度より判断)。

      (ⅲ)ノードtを分割点でleft(t)、right(t)に分割する。

(2)ランダムフォレストmath-2019070822.pngを出力する。

(3)入力データに対する識別結果math-201907087.pngを出力する。2クラス分類なら01で判断し、多数決でランダムフォレストの識別結果を選択する。

SVMやアダブーストが2クラス分類の識別器であるのに対して、ランダムフォレストは多数決によって多クラスの分類に容易に拡張が可能である。一方でデメリットとして各決定木で学習を進める際に、データが少ないと過学習になりやすくなってしまうという点がある。

3 シミュレーション

決定木アルゴリズムCARTを用いた性能評価をAzure MLで行う。評価は以下の2点である。

  • 森のサイズと推定精度

各アルゴリズムで使用する決定木の数を調整し、推定精度にどのような影響が生じるのか評価した。それぞれで作成したモデルは次節で説明する。

  • 学習曲線

学習データの数を調整し、推定精度にどのような影響が生じるのか評価

3.1 シミュレーション1(森のサイズと推定精度)

ブースティング、ランダムフォレストを用いると、森のサイズ(決定木の数)による推定精度の変化を評価することができる。一般的に森のサイズが大きいほど分散が小さくなるので推定精度は良くなることが予想される。以下でモデルの作成に関する説明を述べる。

モデルの作成

下図のフレームワークを用いてそれぞれのシミュレーションを行う。各フェーズについて説明する。

framework1.png

フェーズ1 データセットの整形

データセットはAzure MLに標準で用意されている「2Adult Census Income Binary Classification dataset.csv」を使用している。属性として年齢、学歴、収入などの特徴軸があり判定対象は「性別」とし、サンプル数を10000用意している。

class.png

「Select Columns in Dataset」ではage,education,occupation,race,sex,hours-per-week,income,workclassをcolumnとして選択し、「Clean Missing Data」で"Null"のサンプルを取り除き以下の図のようにつなぐ。

phase1.png

フェーズ2 データの学習とテスト

フェーズ2では各アルゴリズムの学習とテストを行うモジュールで構成される。はじめに「split data」でデータセットを学習データ100個とテストデータ9900個に分割する。次にブースティング「Two-Class Boosted Decision Tree」及びランダムフォレスト「Two-Class Decision Forest」と「train model」を用いて「性別」の判定に関する学習を行う。ここで、それぞれのモジュールにて木のサイズを1〜100まで(計16種類)を設定する。学習させたモデルに対して「split data」からテストデータを「score model」に読み込ませ、以下の図のようにそれぞれつなぐ。

○ブースティング

phase2-1.png

setting2-1.png

○ランダムフォレスト

phase2-2.png

setting2-2.png

フェーズ3 評価と結果の統合、csvファイルへの出力

フェーズ2で行った学習とテストに基づいて「evaluation model」で予測精度の評価を行う。評価を行った後はそれぞれの森のサイズで行った値を集計するため「add rows」でデータの統合を行う。

phase3.png

すべてのデータの統合が完了したら、エクセルにてグラフの作成を行うため、「convert to csv」によりcsvファイルへのエンコーディングを行う。

phase33.png

シミュレーション結果

決定木の数に応じた推定精度評価.png

シミュレーション結果は上記のようになった。学習したデータセットによってそれぞれのアルゴリズムの予測精度は大きく変化するが、今回の結果としては森のサイズが小さいときにはブースティング、森のサイズが大きくなるほどランダムフォレストの予測精度が高いことがわかる。特にブースティングは森のサイズが大きくなることによる予測精度の向上が見受けられなかった。これは誤りやすいデータと誤りにくいデータの相関が大きくアルゴリズムの特性を活かすことができなかった点が考えられる。一方でランダムフォレストは森のサイズが大きくなるほど予測精度は良くなっているが、68%付近にて飽和している。これ以上の予測精度の向上には属性を増やすことが挙げられる。

3.2 シミュレーション2(学習曲線)

決定木に限らず、学習量によってどの程度正確な学習モデルが作成されるかが変わってくる。極端に学習データが少ないと分散が非常に大きく、一つのデータに対する依存度が高くなってしまうことが予想できる。ここでは学習量が各アルゴリズムにて推定精度にどのような影響を及ぼすか評価を行う。

フェーズ1 データセットの整形

前節と同様のため割愛

フェーズ2 データの学習とテスト

各アルゴリズムでの設定を以下の図のように行う。

「split data」

setting4.png

○ブースティング

phase4-1.png

○ランダムフォレスト

phase4-2.png

フェーズ3 評価と結果の統合、csvファイルへの出力

前節と同様のため割愛

シミュレーション結果

学習曲線.png

シミュレーション結果は上記のようになった。ランダムフォレスト(森のサイズ100)が最も精度がよくなっていることがわかる。また、全体的に学習量が増えるほど推定精度がよくなっており、それぞれのアルゴリズムごとにある値で飽和している。また、森のサイズが小さいもしくは決定木1つのみの場合は分散が大きいため、推定精度の安定性が低い。前節でも説明したようにブースティングに関しては森のサイズが大きくなることによって推定精度の劣化が見受けられる。

終わりに

この記事では非線形分類や回帰を行うことができる決定木全般に関する理論とシミュレーションを行った。今は過ぎしマイニングブームでもC4.5やCARTなどは推定精度が高いことから頻繁に活用されていたアルゴリズムである。個人的にはNNやSVMよりも理解しやすいため、是非ロジスティック回帰と併せて学習することをおすすめしたい。

その他、Microsoft Azure Machine Learningでやってみた記事も参考にしてください!

・ロジスティクス回帰も用いたIris Two Class Dateの分類

・分位点回帰を用いた飛行機遅延予測

・パラメーターチューニングを行う

・ランダムフォレスト回帰を用いた人気ブログタイトル予測

参考文献

○決定木について

[1]https://ja.wikipedia.org/wiki/%E6%B1%BA%E5%AE%9A%E6%9C%A8 

[2]https://dev.classmethod.jp/machine-learning/2017ad_20171211_dt-2/ 

[3]https://qiita.com/3000manJPY/items/ef7495960f472ec14377

[4]https://www.researchgate.net/publication/265031802_Chapter_10_CART_Classification_and_Regression_Trees

○分類木について

[5]https://www.solver.com/classification-tree 

○回帰木について

[6]https://www.solver.com/regression-trees 

○不順度について

[7]http://darden.hatenablog.com/entry/2016/12/09/221630 

○ランダムフォレストについて

[8]https://link.springer.com/article/10.1023/A:1010933404324 

○ブースティングについて

[9]https://www.frontiersin.org/articles/10.3389/fnbot.2013.00021/full 

はじめに

 今回はロジスティック回帰についてやっていこうと思います。まずはロジスティック回帰の概要を説明して、最後には実際にAzureでiris(アヤメ)のデータでロジスティック回帰を使っていこうと思います。

勾配降下法

 ロジスティック回帰でパラメータの値を決めるときに勾配降下法を用いるので、簡単に説明をしておきます。

 勾配降下法は、ある関数J(w)が最小となるwを求める際に、あるwでの傾き(勾配)を求めて、降下の方向(傾きが小さくなる方)にwを更新し、その更新をwが収束する(勾配≒0)まで繰り返して収束したところでのwでJ(w)が最小であると決めます。その更新の式は次のようになります。

Microsoft Azure Machine Learningでロジスティクス回帰

ここでのαは学習率といい、降下の方向にどのくらいwを移動させるかを表します。ここでαが大きすぎると最小となる点を更新の際に飛び越えて振動してしまいます。逆に小さすぎるといつまでも収束しないので、適当な値をαに決めなければいけません。またwがn次元ベクトルの場合は、そのn個について同時に更新するということにも注意が必要です(詳しくはロジスティック回帰の説明中)。

Microsoft Azure Machine Learningでロジスティクス回帰

Microsoft Azure Machine Learningでロジスティクス回帰

ロジスティック回帰とは

 ロジスティック回帰とは、ある事象が発生するかどうかを、その確率を出すことにより判定することに使われる手法で、目的変数が2値のときに使われるアルゴリズムです。具体的に言うと、アヤメの花の種類A,B(目的変数)があったとき、その花の花弁の大きさなど(説明変数)から種類を判定したいときにロジスティック回帰を使うことで判定することができます。それではロジスティック回帰の流れを見ていきましょう。

 線形回帰では目的変数yを、パラメータwによって決められる説明変数xの関数h(x)で予測しました。

Microsoft Azure Machine Learningでロジスティクス回帰

 ロジスティック回帰では、このh(x)を下図のシグモイド関数に入れた形にして、その値を0以上1以下にすることで2値(目的変数y=0,1)の分類を可能にします。

Microsoft Azure Machine Learningでロジスティクス回帰

Microsoft Azure Machine Learningでロジスティクス回帰

このh(x)はy=1である確率として解釈できるので、

Microsoft Azure Machine Learningでロジスティクス回帰

のように分類する規則を決めて判定することができます。

 では、パラメータwを決め方について見ていきましょう。結論から言うと次のような目的関数J(w)を最小にするようなwを決めます。

Microsoft Azure Machine Learningでロジスティクス回帰

目的関数はy=0,1を正しく判定したときに最小(→0)、全然一致しないとき最大(→∞)になるように設定します。そこで、h(x)≧0.5(より1に近い)のときy=1と予測し、h(x)<0.5(より0に近い)のときにy=0と予測することから、logの性質を利用して目的関数を決めました。考え方は次のようになります。

Microsoft Azure Machine Learningでロジスティクス回帰

Microsoft Azure Machine Learningでロジスティクス回帰

これで目的関数の設定はできたので、これが最小となるパラメータwを決めていきましょう。ここで使われるのは勾配降下法です。

Microsoft Azure Machine Learningでロジスティクス回帰

ここでの勾配降下法は上の式において、j=0,1,...,nそれぞれについて同時に更新して、wの値が収束するまで更新を続けてwを決定します。

目的関数を最小とするパラメータwを決めることができたので、ロジスティック回帰による予測モデルが完成しました。これで未知のデータに対して予測することができます。

これで流れは掴めたと思いまので、実際にAzureを使ってロジスティック回帰を実行してみましょう。

Azureでロジスティック回帰

 今回はAzureのサンプルデータのIris Two Class Dataを使います。はじめにデータを見てみると(画像はデータの一部)、目的変数に2種類のiris(アヤメ)のクラスを0,1で与え、説明変数にsepal-length(がく片の縦幅)、sepal-width( がく片の横幅)、petal-length(花びらの縦幅)、petal-width(花びらの横幅)の4つを与えています。

Microsoft Azure Machine Learningでロジスティクス回帰

このデータに対してロジスティック回帰を行います。

Microsoft Azure Machine Learningでロジスティクス回帰

Azureでは上のようにするとロジスティック回帰ができますが、流れを整理すると次のようになります。

Microsoft Azure Machine Learningでロジスティクス回帰

Alt text

結果を見ると、一番右の列のScored Probabilitiesはクラス1である確率(h(x))を表していて、0.5以上でクラス1とScored Labelsで判定しています。ROC曲線で評価してみると、

Alt text

完全に予測することができています。今回はサンプルデータなのでこんなにうまく予測できていますが本来はこんなにうまくいきません。

次に縦軸にそれぞれの説明変数ごとにとり、横軸にScored Probabilitiesを取った散布図を見て、どの説明変数が判定に影響を与えているかを視覚的に考えてみます。

Microsoft Azure Machine Learningでロジスティクス回帰

Microsoft Azure Machine Learningでロジスティクス回帰

Microsoft Azure Machine Learningでロジスティクス回帰

Microsoft Azure Machine Learningでロジスティクス回帰

これを見ると、petal-lengthとpetal-widthは明確にその値が大きければクラス1に属する確率が高く、小さければクラス1に属する確率が低いことがわかります。sepal-lengthもpetalよりは弱くなりますが同様の傾向があることがわかります。それに対してsepal-widthは同じくらいの値を取っていても、クラス1である確率が大きかったり小さかったりと明確には言えません。更にどちらかと言うと、値が小さい方がクラス1の確率が高くなっています。その関係がパラメータに現れていることを確認すると、

Microsoft Azure Machine Learningでロジスティクス回帰

petal-length、petal-widthのweight(係数、重み)が大きくなっていて、sepal-lengthのweightがそれに比べ小さく、sepal-widthのweightは負でかつその絶対値は小さくなっていますので、散布図の傾向はしっかりとあたっています。今回はサンプルデータでやったので、かなりうまくいってわかりやすかったですが、本来はここまできれいにはならないでしょう。

まとめ

 今回はロジスティック回帰についてやりました。非常に有名で基本的な手法ですのでしっかりと理解しておくと良いでしょう。


その他のMicrosoft Azure Machine Learning Studioでやってみた記事も参考にしてください!
決定木アルゴリズムCARTを用いた性能評価
分位点回帰を用いた飛行機遅延予測
パラメーターチューニングを行う
ランダムフォレスト回帰を用いた人気ブログタイトル予測

参考文献

Coursera 機械学習 Andrew Ng

はじめに

 今回は2分類SVMについて見ていきますが、数学や機械学習の知識があまりない方も全体のイメージを掴めるよう数式を使うことを極力避けました。ですので厳密には間違っている表記もイメージしやすいよう、わざと入れていることを始めに断っておきます。

SVMを数式を追ってしっかりと理解したいという方には物足りない内容になっていると思いますがご了承ください。

SVMとは

 SVMとは、教師あり学習を用いるパターン認識モデルの一つで、回帰、分類両方につかうことができます。ここでは2分類SVMを考えていきます。

SVMは、「マージン最大化」という考え方を用いて分類する境界(決定境界)を決めます。この考え方によって他の分類モデルよりも高い識別性能を実現していますが、その理由とともにマージン最大化を用いて、次の赤と青のクラスの分類について見ていきます。

Alt text

ここでは簡単のために二次元で直線で分類することを考えますが、三次元以上になったときは下のように平面で切っていると考えてください。なので直線と出できたら基本的には平面に言い換えられると思ってください。

Alt text

・マージン最大化

 マージンとは、分類する境界とデータとの距離のことで、いくつも考えられる境界の中から、サポートベクトルという「分類する境界に一番近いデータ点(境界を決めるのに使うデータ)」との距離が最大となるような境界を見つけようというのがマージン最大化という考え方です。このとき、それぞれのクラスのサポートベクトルに対するマージンは同じであるとします。ただし、2クラスそれぞれのサポートベクトル間の距離をマージンということもありますが、結局その距離のちょうど半分にしたところに境界を設定しているということです。つまり、どちらでマージンを設定するにしろ、2つのクラスからなるべく離れたところに境界を引きたいということです。

マージン最大化の考え方を用いて赤と青の2つのクラスを分類してみると次のようになります。

Alt text

では、なぜマージン最大化を用いて分類することで高い識別性能が得られるのでしょうか。

 上の図のような分類を考えると、その分類する境界というのは無数に考えることができます。まず考えてほしいのは分類する目的の大前提として、今ある値を分類することにより、まだどちらのクラスの属するか分からない未知の値に対してどちらのクラスに属するかを正しく予測することがあります。つまり、分かっているデータに対して正しく分類できたところで、未知のデータに対しての正しく予測できている割合が極端に低くなるような境界では全くの無意味だということです。

Alt text

Alt text

例えば、図のように片方もしくは両方のクラスの値ギリギリにあるような境界を設定してしまうと、そこからほんの少しだけずれたようなデータに対して誤分類を起こしてしまう可能性が高くなります。そこで、マージン最大化を考えることにより、データが少しずれただけでは誤分類を起こさなくなります。これによりマージンを考えて決めた境界で分類することにより、それを考えずに境界を決めたモデルより「汎化能力(新しいデータに対して正しく予測する能力)」が高くなっています。このことから、SVMはマージン最大化を考えることにより、汎化性能が最も高い境界により分類を行うことを可能にしています。

・ソフトマージン

 ここまでは、2クラスに対して直線で分類可能(線形分離可能)なデータに対して考えてきましたが、データが次のようになっていたらどうでしょう。

Alt text

 データがこの様になっていた場合、直線で2クラスを完全に分類するのは不可能です。このようなデータに対して完全に分類しようとすると、もし誤分類をしてしまったデータに分類に大きく影響するような情報が含まれていた場合、汎化能力が下がってしまいます。ここで出てくるのがソフトマージンです。

実は先程までの、線形分離可能なデータに対して考えたマージンをハードマージンといい、これは完全に2つのクラスを分類できることを前提にしたマージンです。それに対してソフトマージンは、あらかじめ誤分類を許すことで汎化性能を高めることを考えたマージンです。もちろん、誤分類が多すぎては汎化性能を高めるどころか低くしてしまう一方なので、「境界線とデータがなるべく離れていること」・「誤分類数をなるべく少なくすること」の2つを達成するようにします。

そこで次のような値を最小にすることを考えて、境界を決めます。

Alt text

ここでCは、「どの程度まで誤分類を許すか」を表すパラメータです。Cが小さい場合、多少誤分類数が多くても値は大きくならないので、ある程度誤分類を許すことになります。それに対して、Cが大きい場合、誤分類数がより0に近くなければ値が大きくなってしまうので、あまり誤分類を許さないことになります。Cが無限に大きければ誤分類を許さなくなるので、上でのハードマージンと一致します。つまりCの大きさを調整すればハードマージン・ソフトマージンの両方を実現することができるので、C-SVMで両方の問題に対応できます。

 C-SVMで分類した様子は次のようになります。

Alt text

ここで、なんでマージン境界内に点が入ってくるのか、なんでサポートベクトルが色々増えているのかと思ったと思います。実は上で書いた式に少しだけ嘘が含まれていて、そこは誤分類数のところです。ここの値はダイレクトに誤分類数を表しているのではなく、誤分類したデータやマージン境界内にあるデータによって決まる値なんです。詳しく言うと、マージン境界より外で正しく分類できている点に対しては0、マージン境界内で正しく分類できるデータに対しては0から1の間の値、誤分類している値に対しては1より大きな値を与えます。なので、境界を決める際に誤分類のデータとマージン境界内のデータにより決めていることになります。そこでサポートベクトルの定義に戻ると、境界を決めるのに使う(影響のある)データなので、今までは境界から一番近いデータ(紫)がそれになっていましたが、ここではそれ以外にもマージン境界内のデータ(緑)と誤分類をしたデータ(黄色)が使われるのでそのデータもサポートベクトルになっているのです。そのそれぞれにも名前がついていて、マージン境界上のデータ(紫)が自由サポートベクトル、それ以外のサポートベクトル(黄・緑)を上限サポートベクトルといいます。実際にはこんな値が入りますが、結局一番影響を与える誤分類数をCでどの程度にするのかが一番重要ですので、そこをまずは抑えて、境界を決める要素が増えたんだなーと思っていいただければいいと思います。

Alt text

 ソフトマージンにより非線形分離不可能なデータに対してSVMを適用できましたが、ここでのCは自分で決めなければならず、まず最適なパラメータを見つける必要があります(これがSVMの欠点につながる)。ここでは詳しいことは述べませんが、その方法としてグリッドリサーチ(色々なパラメータを試して精度の良いものを採用する)などがあります。

・カーネルトリック

 ソフトマージンにより、直線で分離が不可能な場合でも誤分類により境界を決定することができましたが、直線で分離をしているので、ある程度の性能しか望むことができません。そこで登場するのがカーネルトリックです。この手法によりSVMは強力な威力を発揮します。

 この手法を考えるときに次のような2クラスを分類することを考えます。

Alt text

 これを分類しようとしたときに、今まで出てきたSVMを使ってやろうとしてもうまくいかないだろうと思うはずです。そこで、直線だけでなく曲線を使えるとしたら、下のような境界を使って分類することができれば良いですよね。

Alt text

 この境界を引くことをできるようにしたのがカーネルトリックです。

 では、どのようにこれを可能にしているのかを数式は使わず考え方を中心に説明します。参考書なんかを見ると特徴空間に変換して分類するみたいなことが書いてあると思います。これは、今ある特徴量(上の赤と青の位置を決めているもの)では分類できないものを、新しい特徴量を作って分類できるようにしようということです。

※特徴量のイメージをしやすいように、予測の流れを出しときます。

Alt text

ここでのカーネルのイメージとしては、直線で分類できないものを、マージン最大化の最初で出てきたようなデータがある程度分かれた状態にして、直線で分類できるようにするというものです。これを簡単な例で見ていきましょう。

 次のようなデータが数直線上にあったらどう頑張っても直線では赤と青のクラスに分けるごとができません。

Alt text

そこで二乗した値を作るとどうでしょう。

Alt text

すると、このように直線で分類することができるようになります。厳密に言うと違うのですが、イメージ的にはこのような変換をカーネルで行います。実はカーネルにも種類があって代表的なのはガウスカーネルと多項式カーネルですが、ここでは主にガウスカーネルについて考えていこうと思います。

 ガウスカーネルは簡単に言うと値と値の近さを表しているものです。例を見るとイメージが掴めると思うので、円の境界を引きたいと思った例で考えてみましょう。

 この例では感覚として、真ん中らへんとその周りに分けることを考えたと思います。その感覚で真ん中らへんとそれ以外をはっきり分けられるような特徴量を今あるデータ(特徴量)から作れないかなーと考えるわけです。そこでガウスカーネルによって特徴量を考えていきますが、近くにあるデータは似た特徴量を持っていてほしいじゃないですか。例えば真ん中らへんにあるデータに対しては小さいけど、周りにあるデータに対しては大きい特徴量があれば、下のようになって分類しやすくなります。

Alt text

ガウスカーネルはデータとデータの近さを基準としてこの変換を行います。まずある一点を基準として、他のすべてのデータとの近さに関する値を出します。これを、基準を変えてすべてのデータ間の近さを調べて、それを使った値を特徴量として変換を行います。ここでどのくらいの近さまでを同じクラス、似た特徴量を持ったとするのかという問題が起きます。これを決めるのにはカーネルの中にあるパラメータを決めて調整しなければいけません。ただ、基本的には近さでデータの特徴を決めたいんだということだけまずは理解してほしいです。

 分かりやすいように、3つのデータだけで考えてみましょう。それぞれの点からの距離を取って、ある点からAまでの距離を特徴量a、Bまでの特徴量をb、Cまでの特徴量をcとします。実際は今あるデータの特徴量を使ってガウスカーネルで変換しますが、ここでは簡単のため距離をそれぞれ設定しました。

Alt text

ここで、特徴量a、b、cをそれぞれの点でみると、CだけA、Bとは逆(A,Bからの距離が近いときはCは遠い)になっていることが分かると思います。つまり、クラスの違うCだけが仲間はずれとなっています。こういったことを、もっとデータ数が多くて、直線で分類できない問題に対してカーネルを使って変換することでやっているのがカーネルトリックです。多項式カーネルは、意味としては最初に二乗した例に近いことがあるかもしれませんが、やりたいことは同じです。

 では、元の例に戻ってカーネルで変換する様子の一部分見ると次のようになります。

Alt text

このように特徴量を変換するとイメージとしては次のようになり、分類が明らかにしやすい配置になっているのが分かると思います。

Alt text

 まとめると、直線で分類できないものをカーネルを使ってデータの特徴量を、クラスの違う特徴量に変えて直線で分類しているということです。特徴量を変換したあとは、マージン最大化で分類をするので、上のカーネルを使わなかった分類と同じです。では、どのようにしてカーネルのある無しを使い分けたらいいのかを見ていきましょう。

・カーネルのある無しの使い分けとSVMの欠点

 上のカーネルを使わないSVMと使うSVMを比べたとき、一見カーネルを使ったほうがそのままだと直線で分類できてものも分類できるからそっちを使えばいいと思うかもしれません。しかし、カーネルを使うのにも欠点があります。カーネルはより良い特徴量を取るために変換を行いましたが、もうすでに十分多くの特徴量が得ることができていたらどうでしょう。色んな特徴量があればそれだけ問題は複雑になるので、更にそこから変換を行うと今あるデータに厳密に従いすぎてしまいます(過学習という)。つまり新たなデータに対して無意味な境界になってしまうので、この場合はカーネルを用いないSVMを使ったほうがいいです。

 逆に、特徴量が少ない場合、つまり十分な特徴量は得られない場合はどうでしょう。この場合はデータが非常に単純な場合を除いて、上で見てきたようなような直線で分類できないような問題になっている可能性が高いので、カーネルを用いたSVMを使うといいです。

 ただ、データがかなり多い場合はカーネルを使うと、変換をするときに計算量が多くなってしまうので、この場合は変換をするのではなく特徴量を自分で増やして、十分にとってからカーネルを用いないSVMを使うといいです。

 また、SVMの欠点としてはパラメータを設定しなければならなかったり、カーネルを選ばなければならないことや。データが多いときはあまり効率的ではありません。この問題をクリアしている手法として「ランダムフォレスト」があります。これを使えばSVMより効率よく良い結果が得られるかもしれませんが、これは実際に使ってみないとどちらの手法が良いのかは判断できませんし(どちらにも長所・短所がある)、それぞれの特徴をしっかり理解することが重要です。

まとめ

 今回は2分類SVMについてやりました。数式をほとんど使わなかったので、逆に分かりづらいところもあったかもしれませんが、SVM全体のイメージは掴めたでしょうか。SVMは他にも1クラスに対して外れ値を検出するものや、回帰にも使えますし、ロジスティック回帰との関係を見ても面白いと思います。また、最後に出てきたランダムフォレストについては、他の記事を見てもらうと良いと思います。

参考文献

Logics of Blue サポートベクトルマシンの考え方

はじめてのパターン認識 平井有三(著) 森北出版

分位点回帰は、普通の直線回帰とは少し変わった、特殊な回帰ですが、正規分布に従わないデータを処理する際、柔軟な予測をすることができる便利なモデルです。今回は、理論編・実践編に分けて、分位点回帰を解説していきたいと思います。

理論編

1.回帰

回帰とはデータ処理の方法の一つで、簡単に言うとデータを予測するモデルを作る際に、「モデル化=簡略化」に伴う損失を最小限にすることです。そしてこの「損失」を定量化するためにモデルごとに様々な「損失関数」を定義します。「損失関数」の値を最小化するようなパラメーターを探すことが、いわゆる「学習」と呼ばれる作業になります。数多くある回帰ですが、その一つが今回紹介する「分位点回帰」です。

2.分位点

分位点回帰はその名の通り、「分位点」に注目した回帰です。「分位」とはデータを順番に並べた時に、上位何%に入るかを表現するときに使います。例えばquartileとは四分位のことで、データを四等分にできます。

0th quartile = 上位0%

1st quartile = 上位25%

2nd quartile = 上位50%

3rd quartile = 上位75%

4th quartile = 上位100%

他にもquintile=五分位など、何等分にデータを切るかは自由に設定することができます。

こういうふうにデータを区切ると、例えば身長が上位25%の人と身長が上位75%の人で変数の影響が違う場合、それらを具体的に見ることができます。これは分位点回帰が一般的な直線回帰や重回帰とは違う点です。

3.損失関数

分位点回帰の損失関数と、一般的な最小二乗法の損失関数とでは決定的な違いがあります。最小二乗法では全てのデータポイントにおける損失が均等に評価されるため、平均に対して回帰していくことになります。しかし、事故率や年収など、偏りがあるデータでは、平均における情報よりも中央値における情報の方が重要だったりします。そのため、分位点回帰などは「上位何%における変数の影響」という平均とは全く違う観点でデータを見ることができます。

「上位何%における変数の影響」を見るからといって、その上位何%のデータのみを使うわけではありません。データは常に全て使うのですが、データによって損失関数に対する影響が違う、というふうに捉えるとわかりやすいでしょうか。この損失関数を使うと、損失関数の微分が0<=損失関数が最小の時、上位τ%の値について予測できるような変数の係数が計算されているのです。

(もっと知りたい人向け)

具体的には損失関数は

Alt text

で定義されます。 ここで

Alt text

がquantileにあたる数字になります。

Alt text

は累積分布です。

この損失関数が何故うまくいくかというと、左辺を微分したものの値が0となるような u = q_τに対して、

Alt text

となり、整理すると

Alt text

なので、確かにq_τが上位t%の値だとわかります。

4.長所と短所

上でも説明したように、分位点回帰は偏りのあるデータを処理したり、特定の分位における変数の影響を予測するのに適しています。逆に、分布が正規分布に近い場合は、平均で回帰した方が正確な結果が出ることになります。

実践編

では実際のデータを使ってQuantile Regressionを試してみましょう。今回はMicrosoft Azure MLに実装されているものを使って、飛行機の遅延について予測するモデルを訓練していきましょう。

0.データ

今回のデータは飛行機の離着陸の遅延時間、空港、日時などをまとめたデータセットです。

Alt text

DerDelay, ArrDelayを見てみると、かなり左側に偏っていることがわかります。またCarrier(飛行機会社)も正規分布よりかなり偏っているので、Quantile Regressionを活かせそうだ、ということがわかります。通常は空白のセルの処理やデータの取捨選択が必要になりますが、今回はMicrosoft Azureに内装されたデータセットを使うので、その必要はなさそうです。

1.データの分割

学習をするにあたって、機械を学習させるための学習データ(training data)と、その学習を評価するデータ(evaluation data)の2種類が必要になってきます。そこで、元のデータをランダムに分割する"Split Data"を使います。今回は元データの60%を学習データに使用することにしました。もちろん、この値は調節可能です。

Alt text

Alt text

2 モデルの選択

今回はQuantile Modelを使ってみたいので、その一つであるFast Forest Quantile Regressionを使います。

Alt text

Fast Forest Quantile Regressionのパラメータは初期設定のままにしました。一部TreeやLeavesのような見慣れない単語が出てきますが、興味のある方はRandom Forest Regressionについての記事をご覧ください。

理論編で紹介した部分に当たるのは、下から2番目の"Quantiles to be estimated"になります。入力されている値を見ると、四分位なことがわかります。

Alt text

3.学習

実際の学習モジュールを追加していきます。ここでは、"Train Model"モジュールに対して、どの変数を予測したいか、を指定しなければなりません。今回は出発の遅延を調べたいので、DepDelayを選びます。

また、分割したデータのうち、学習用のデータ(左側)を入力として指定します。

Alt text

Alt text

4.評価と結果

学習が終わったら、モデルの精度を「見たこともないデータをどれだけ正確に予測できたか」という基準で測ります。ここで最初に分割しておいた評価データを使うことになります。

Alt text

学習結果を見てみましょう。

Alt text

一番左端が今回予測したDepDelayで、右側3列がQuantile Regressionで予測した結果になります。

例えば一番上のDepDelay=-4のデータでは、全体の中で第1四分位に属しているため、"Score for quantile 0.250"の値が一番正確です。

逆に、中ほどにあるDepdelay=65のデータは、全体の中で第4四分位に属しているため、"Score for quantile 0.750"の値が一番正確です。

この結果からわかることの一つは、全体の中でどの四分位に属しているかによって、変数の影響が違う、ということです。でなければ、どの予想も同じような数字を出力するはずです。このような柔軟性のある分析ができるところが、分位点回帰の利点になります。

以上、分位点回帰の理論と実践でした。
その他のMicrosoft Azure Machine Learning Studioでやってみた記事も参考にしてください!
決定木アルゴリズムCARTを用いた性能評価
ロジスティクス回帰を用いた Iris Two Class Dataの分類
パラメーターチューニングを行う
ランダムフォレスト回帰を用いた人気ブログタイトル予測

参考文献: 分位点回帰を使って、「その回帰予測どれくらい外れるの?」を説明する

様々な場面で使われるランダムフォレストですが、大きく分けると「ランダム」の部分と「フォレスト=森」の部分の2つに分けることができます。そこで今回は理論編でそれぞれの部分がどういう仕組みになっているのか、解説していきたいと思います。後半では、実践編と題して、実際のデータセットとMicrosoft Azureを用いてRandom Forest Regressionを一般的なLinear Regression (直線回帰) と比べてみたいと思います。

理論編

0.前提知識

ここではRandom Forest Regressionの中身を主に説明していくので、一部省略している部分があります。具体的には、

「回帰」って何?

「学習」って何?

のような問いには答えていないので、その場合は他の記事をご参考ください。ここでは、Random Forestの仕組みについて説明していきます。

1.「フォレスト=森」

フォレストモデルはその名の通りで、複数の「木」から成り立つ「森」のような学習モデルです。下の図のように、一つ一つの木は「decision tree(決定木)」のような条件分岐でデータを分類しています。それぞれの分岐において使われる変数を説明変数と言い、最適な説明変数を学習していくのが決定木における学習です。

例えば、下の図の場合、まずは「男性かどうか」、次に男性のうち、「10歳位以上かどうか」、最後に、10歳未満の男性のうち、「兄弟が3人以上いるか」、このような分岐条件でデータを4つに分類しています。

実際には、この3つの説明変数以外に、「身長が170cm以上か」「海外旅行に行ったことがあるか」など、様々な説明変数があり、どの変数を使うとデータを一番適切に分類できるか、決定木が学習していきます。

Alt text

木が深いほど細かく分類ができますが、計算負荷が増えるので、回帰に使用する場合は深さをn=5にするのが良いとされています。

このような木を複数集めて、結果を平均したものを最終結果として決定するのが、フォレストモデルです。計算負荷の少ない小さな木を複数使って最終的な判断を総合的に行う、このような学習モデルをアンサンブル学習と言います。

Alt text

(もっと知りたい人向け)

各ツリーにおける分岐の分割条件の計算方法も様々あり、回帰モデルか分類モデルかによって変わります。

ここで扱う回帰モデルの場合、最小二乗法が使われますが、分類モデルの場合、

  • エントロピー
  • ジニ不純度
  • 分類誤差

の3つがよく使用されます。詳しい内容は次の記事をご参照ください。

決定木の2つの種類とランダムフォレストによる機械学習アルゴリズム入門

2.二つのランダム

計算処理が早いツリーを組み合わせるフォレストモデルですが、一つ大きな問題があります。もし個々の木が全く同じようにデータを処理するのであれば、データ全体の特徴を反映することができません。一つの小さな木を使ってるのと同じになってしまいます。つまり、木によって分岐条件が違わなければ分類制度が低くなってしまいます。そこで、

  • 学習データ
  • 初期説明変数

をランダムで設定することで学習制度を向上させています。学習データの選定はブートストラップ法と呼ばれ、それぞれの決定木に関して毎回母体データからランダムに一部を選び取ります。初期説明変数も同様に、全体の説明変数から毎回ランダムにいくつか選び、決定木の説明変数として使用します。

3.長所と短所

最後に、ランダムフォレストはどのような利点・欠点があるのでしょうか。

長所としては、

  • 説明変数が多数であってもうまく働く
  • 学習・評価が高速
  • 決定木の学習は完全に独立しており、並列に処理可能
  • 説明変数の重要度(寄与度)を算出可能

などがあります。

短所は、

  • 説明変数のうち意味のある変数がノイズ変数よりも極端に少ない場合にはうまく働かない

というものです。つまりデータの分類・予測に有用な変数が少なければ、学習がうまくいかないことになります。

実践編

では、実際Random Forest Regressionを使って学習をしていきましょう。今回はMicrosoft Azure MLを使って説明します。

今回使うデータセットはブログに関するデータで、タイトル、お気に入り登録者数などの情報が入っています。今回はこのデータセットから、

「どのような名前が人気のブログになりやすいのか」

を回帰してみたいと思います。

0.データ処理

まず初めに、使うデータを綺麗にします。通常、空白になっている部分があったりして、処理がすぐにはできないようになっています。

そこで、データを前処理する必要があります。今回は、

  • 必要な列を選ぶ
  • 空白の値があるデータを取り除く

の二つの処理を行いました。

Alt text

今回の目的はどういう名前が読者を集めやすいのか、というのを知りたいので、

メインの変数:BLOG_COUNT (読者数)

説明変数:

  • DAYSSINCELAST_POST (最後に更新されてから何日経っているか)
  • VOWELS (アルファベットの母音がいくつあるか)
  • NON_ALPHABET (日本語の文字がいくつあるか)
  • LENGTH (タイトルが何文字か)

を選びたいと思います。

Alt text

1.データの分割

学習をするにあたって、機械を学習させるための学習データ(training data)と、その学習を評価するデータ(evaluation data)の2種類が必要になってきます。そこで、元のデータをランダムに分割する"Split Data"を使います。今回は元データの60%を学習データに使用することにしました。もちろん、この値は調節可能です。

Alt text Alt text

2.モデルの選択

今回はRandom First Modelを使ってみたいので、標準的なLinear Regressionと比べてみることにします。

Alt text

モデルのパラメーターは初期設定のままにしました。下の画像からもわかるように、決定木が8本あり、最高でn=32の深さまで木を作ることができます。

Alt text

3.学習

実際の学習モジュールを追加していきます。ここでは、それぞれの"Train Model"モジュールに対して、どの変数を予測したいか、を指定しなければなりません。人気のブログを予測したいので、BLOG_COUNTを選びます。

また、分割したデータのうち、学習用のデータ(左側)を入力として指定します。

Alt text

4.評価と比較

今回はRandom Forest ModelとLinear Regressionの精度を比べますが、2種類の比べ方をしたいと思います。

一つ目は、「与えられた学習データをどれだけ正確に学習できたか」という基準です。理想的には、入力に使ったデータなので100%予測してほしいものなのですが、現実的にはそうもいきません。そこで、2種類のモデルがどの程度精度をあげられたのかをまず比較します。

Alt text

二つ目は、「見たこともないデータをどれだけ正確に予測できたか」という基準です。ここで最初に分割しておいた評価データを使うことになります。

Alt text

5.結果

以上を全て組み合わせると、以下のような図になります。

Alt text

そして学習データの結果を比べると、下の図のように、

Alt text

誤差がRandom Forest Regression (2列目)の方が小さいことがわかります。 同様に評価データについても、Random Forest Regressionの方が精度が良いことがわかります。

Alt text

今回は説明変数も少なかったのですが、説明変数が非常に多い場合、比較的速く学習できるモデルとしてRandom Forest Regressionは有用です。

以上、Random First Regressionの理論と実践でした。


その他のMicrosoft Azure Machine Learning Studioでやってみた記事も参考にしてください!
決定木アルゴリズムCARTを用いた性能評価
ロジスティクス回帰を用いた Iris Two Class Dataの分類
分位点回帰を用いた飛行機遅延予測
パラメーターチューニングを行う

参考文献:

決定木の2つの種類とランダムフォレストによる機械学習アルゴリズム入門

だれでも分かる機械学習(入門)第3回 Azure Machine Learning 回帰分析

パッケージユーザーのための機械学習(5):ランダムフォレスト

1,ベイズ統計学とは

ベイズ統計学とは、ベイズの定理を基礎とした統計学の体系である。

2,他の統計学との相違

  1. ベイズ統計学は標本を必ずしも必要とせず、母数が確率的に動くとみなす学問
  2. 記述統計学はデータを集計する手法を学ぶ学問
  3. 推計統計学は限られた標本のうち全体となる母集団の性質を推測する学問

3,ベイズ統計学の歴史

1700年頃、トーマス・ベイズによりベイズの定理が発表された。 後に、1800年代後半にベイズ統計の基礎ができた。 しかし、推計統計学論者のフィッシャーらによって主観確率を 取り扱う統計は科学的ではないとしてベイズ統計は闇に葬りさられた。 1950年代に入り、ベイズ統計の利便性の高さから注目されて、 近年は機械学習やビッグデータの分野で利用されることから多用されるようになった。

4,ベイズ統計の特徴

ベイズ統計では、主観確率を取り扱う。主観確率とは、 人により対象の確率が変動する主観に基づく確率の事である。 この確率を使用して事前確率と事後確率を用いて数式化する。

5,事前確率と事後確率

事前確率とは、データを手に入れる前に想定していた確率のことである。 事後確率とは、データを用いて事前確率を修正した結果の確率のことである。

6,ベイズ変更

事前確率を変更してより正確と考えられる事前確率に変更することをベイズ変更という。 ベイズ変更により事前確率が変更するため、その結果事後確率が変わる。

7,ベイズ統計の公式

ベイズの定理 P(A|X)=P(X)分のP(X|A)P(A)=P(A)✕P(X)分のP(X|A)

  • P(A|X):事象Xが起こった状況下で事象Aが起こる確率(事後確率)
  • P(A):事象Aが起こる確率(事前確率)
  • P(X):事象Xが起こる確率
  • P(X|A):事象Aが起こった状況下で事象Xが起こる確率

ベイズの定理を文字として表現すると、 事後確率=事前確率✕修正項 になる。 この数式に数を代入すれば事後確率が求まる。

8,ベイズ統計の使用例

1.迷惑メール判別

ユーザーがスパムとしたメールとスパムではないとしたメールから、タイトル、 本文に含まれる語句ごとの出現確率を抽出して点数をつける。 スパムと正常なメールを判別するための閾値を導き出す。 新規メールを受信したら、そのタイトルや本文を自然言語処理し、閾値と照らし合わせてスパムメールである 確率が高ければスパムメールとして振り分ける。

2.検索エンジン

Googleやマイクロソフトの検索エンジンはベイジアンフィルタを採用している。 1990年頃まで一般的だったif,and,or, butを使い判別する検索エンジンの検索精度や速度を凌駕した。

3.アプリケーション開発

インテル、マイクロソフトなどで活用されている他、LINEスタンプのレコメンドエンジンにも応用されている。

1.判別分析の定義

判別分析とは、統計学上のデータ解析手法の一つである。
特定のグループに分かれているデータを元にどのような基準で判別されているか解析する。
そして、どちらのグループがA群に属され、B群に属されるかを予測する分析のことである。

2.判別分析の成り立ち

1936年にロナルドフィシャーによって線形判別分析が発表され、これを元に分析手法が発達した。

3.判別分析の例

1.医療診断 
・喫煙の有無により癌の発病を予測
・検査結果から病気の有無の判別
2.選挙予測
・世論調査による法案の通過の有無予測
・立候補政党から立候補者の当落の判別
3.受験合格の予想
・模擬試験の採点から志望校の合格を予測
・勉強時間等から合否の判別
4.マーケティングの予測
・企業の倒産の判別
・画像の色や形から異常の判別
・顧客の発注の有無判別

4.判別分析の種類

A 群とB群を線で仕切りA群に属するかBに属するかを分ける方法には、以下の2種類がある。
1.線形判別関数で仕切る
線形判別関数とは、2つのクラスを最もよく判別できる直線を求める手法の事である。

image

2.マハラノビス距離で仕切る
マハラノビス距離とは、データの分布の広がりを加味した距離のことで2点間の直線距離を 標準偏差で割った値を2乗して求められる距離のことである。

image

5.判別分析の手順

1.事例
例)A塾では、生徒をなるべくいい学校に合格させたい。
そこで生徒の能力で一番上の志望校をお勧めするために模試を作った。
2.分析の目的
模試によって生徒の志望校の合否判定を行うこと。
3.データ準備
今回の目的のために、様々なデータを集めた。
例)合格点数、志望者数、偏差値等のデータ
採用するデータを集める際には、人間が集めるためアナログな部分がある。
4.判別分析ツール
統計ソフトを使いそれらのデータを入れて計算する。
データは相関性の強いもののみを使用して、線形判別係数により判別式を作る。
5.分析結果の活用
判別式で出た数値を元に合否を判断する。
今回の場合、判別式でyが1以上であれば、合格になる可能性が高いと判断できる。 そして、A塾はこの模試の結果に基づいて生徒にもっとも良いと思われる学校をお勧めする。

6.まとめ

判別分析は、様々な場面で利用することができる。
しかし、データの選択をする際には、人間が選ぶため相関性が高いのか判別して式に落とし込む必要がある。

1.クラスタリングの定義

クラスタリングとは、機械学習の目的物を分類する一つである。
与えられたデータを外的基準なしに自動的に分類する手法の事である。
簡単に言えば、データの集合体をカテゴリに分けることである。

2.クラスタリングの特徴

機械学習には教師あり学習と教師なし学習に大別される。
1.教師あり学習
人が正解を提示してそれを元に観測したデータから予測する事である。
2.教師なし学習
観測データのみを分析する。
クラスタリングは教師なし学習に分類される。
そのため、分類の基準が明確ではない。
分類の外的な基準が与えられていない場合にはどうしてそのように機械が分類したか分析する必要がある。

3.クラスタリングの目的

クラスタリングの目的は、まとまりのないデータを分類してマーケティング等で応用することである。

4.クラスタリングのアルゴリズム

クラスタリングを行うためには以下の2つのアルゴリズムを利用する。
1.断層クラスター分析
グラフ(例)

image 2.非断層クラスター分析
グラフ(例)

image

5.断層クラスター分析

断層クラスターとは、集合体のデータのうち最も類似している組み合わせにまとめて分類する手法である。
この手法は、結果を出すのに繰り返しデータを計算して断層的に併合するので樹形図のような形に見える。

6.断層クラスターのメリット・デメリット

断層クラスターは予めクラスターの数を決める必要がないので便利である。
しかし、断層が増えるたびに計算量が増加していき実行に時間がかかるので、膨大なデータを扱うのには向いていない。

7.非断層クラスター分析

非断層クラスターとは、異なるデータの集合体の中から対象のものを集めて分類する手法である。
ビッグデータを解析して大量のデータを分類する際に行う。

8.非断層クラスター分析のメリット・デメリット

非断層クラスターはデータの数が多いものでも取り扱う事ができる。
しかし、予めクラスターの数を決めておかなければならない。

9.クラスタリングの注意点

クラスタリングを行う際には、何らかの主観的視点に基づいているため客観的な証拠とする事ができない。
そのため、クラスタリングの結果を使う際は、その結果が妥当なのか検証しなければならない。

10.まとめ

クラスタリングは教師なし学習であり、似ているデータを分類する手法である。
クラスタリングは、断層クラスター分析と非断層クラスター分析のアルゴリズムを使用して分類を行う。

1.単回帰分析とは

回帰とは、統計学においてYが連続値の時にY=f(x)というモデルをあてはめる事である。
これにより二つの事項に関する相関関係などをを分析することができる。


2.単回帰分析の成り立ち

19世紀にフランシス・ゴルトンによって「回帰」という言葉が誕生した。
ゴルトンは、遺伝子学の研究において分析を行い、その際に身長と遺伝子の関係を回帰モデルを用いた事で後の統計学で使われる回帰モデルが発展した。


3.単回帰分析の例

例えば、都道府県の人口密度と人口100万人あたりのコンビニの数を示したグラフがあるとする。
薬局の数yを目的変数、人口密度xを説明変数とするとき、y=ax+bのa,bは回帰係数である。またy=ax+bのような式は単回帰式と呼ばれる。


4.単回帰分析の特徴

単回帰式は説明変数xが一つのみの状態の式である。
例えば、アパートの賃料を予想する際には、 単回帰分析の場合は、目的変数を賃料とおき, 説明変数を部屋の広さのみで求めるのに対して、重回帰分析ではその説明変数が複数あるものである。


5.y=ax+bの式には誤差が生じるがどう対処する。

データにはy=ax+bの線から離れた点も存在する。 これらの誤差が大きければ大きいほど予測が不正確になる
。 そのため、誤差を小さくしなければ正確な予想ができない。 そこで誤差をuとおきy=ax+bに挿入してu=y-ax-bと表す。 その後、誤差uを最小とするために最適なa、bを最小二乗法で求めれば誤差の小さい単回帰分析ができる。 image


6.回帰分析を用いるメリット

  1. 散布図から当てはまる直線を引くことで分かりやすく理解できる。
  2. データが無いところも推論できる。


7.総評

以上のことから単回帰分析は散布図から求められ、y=ax+bというわかりやすい線によって求めたい数を把握できるためメリットは大きい。しかしながら、使われる場面は重回帰分析の方が多い。

1.ニューラルネットワークの定義

ニューラルネットワークとは、人間の脳内にある神経細胞(ニューロン)とそのつながり、 つまり神経回路網を人工ニューロンという数式的なモデルで表現したものである。

2.ニューラルネットワークの歴史

コンピューター科学の父であるアラン・チューリング氏によって様々な論文が出された。 その中の特に「チューリングテスト」によって第一次AIブームが到来し、 ニューラルネットワークの黄金時代を築くようになった。

3.ニューラルネットワークを直感的に理解するための数式

image 生物の脳内にはニューロンという細胞があります。 この細胞には電気物質が通り別の細胞に電気が流れることで脳が活性化します。 以下でこれを数式化したい。脳内では、シナプスという細胞があり、これをxとおく。 シナプスを経由した細胞体(ソマ)に集合する。これをbとおく。細胞体(ソマ)を流れるものがアクソンであり、 これをyに伝達します。これらを通る電気をwとおきます。 これらを数式に置き換えるとf(x1、x2)=b+w1x1+w2x2というわかりやすいものになります。 この数式を重ねれば重ねるほど脳の伝達が複雑化し多様化する。 つまり、ニューラルネットワークの構築には、シナプスに電気物質が流れ他の細胞に行くことが 繰り返されるように情報データを別のデータと集合し重ねる事で、 正確なデータを出すことができるネットワークを作ることができます。

4.ニューラルネットワークの種類

1.ディープニューラルネットワーク
十分なデータがあることで、人間の力なしで機械が自動でデータから特徴を抽出してくれる。
2.畳み込みニューラルネットワーク
人工知能により画像分析を行う手法である。画像認識処理を行うのに使われる。
3.再帰型ネットワーク
時系列データを使用するネットワークである。翻訳機や音声認識に使われている。

5.ニューラルネットワークの目的

1.量を予測するため。
例えば、売上金額を予想したいときに使用する。
2.どこに何が分類されるか予想するため。
例えば、受注か失注かを区別したい時に使用する。 
3.異常なデータの抽出するため。
例えば、機械の故障検知やクレジットカードの不正利用の検知に使用する。
4.構造を発見するため。
例えば、文書検索のためにキーワードを決める目的に使用します。

6.ニューラルネットワークのモデル例

主なモデルを分類すると以下の4つに分ける事ができる。

  1. 回帰モデル
  2. 分類モデル
  3. 異常検知モデル
  4. クラスタリングモデル

これらのモデルを使用して物事を予測したり、分類したりします。

7.私見

現在、ニューラルネットワークは急成長している。私見では、 今後このネットワークは労働不足問題の解決に役立つものである。 ただし、現在のニューラルネットワークを用いて物事を判断する際に 倫理的な判断能力に欠落があり、これは機械学習の大きな課題である。

8.総評

以上のように、ニューラルネットワークは課題はあるものの、 今後の私達の生活の向上に必要不可欠なものである。

1.ランダムフォレストの定義

アルゴリズムで複数の決定木を使用して、「分類」または「回帰」をする、 機械学習の代表的なアルゴリズムのことである。

2.決定木とは

決定木とは、決定理論の分野において決定を行うためのグラフであり計画を 立案して目標を達成するために用いられる。 このグラフ(質問に対してyes or noと答える分岐グラフ)を見ると木のような 形をしていることから木構造であるといえる。 これが、決定木の名前の由来である。

3.決定木の種類

決定木は大別すると、分類と回帰に分ける事ができる。 分類木は性別を分けるように分類可能な変数で分類を目的にして決定木のアルゴリズムを使用する場合に使う。 回帰木は株価の変動のように分類がなく、過去からのデータを使い、未来の数値を予想する場合に使う。 これらの決定木のベースにアルゴリズムを形成することをランダムフォレストと呼ぶ。

4.アンサンブル学習

アンサンブル学習は決定木をランダムに構築してそれらの結果を合わせて分類と回帰をする方法である。

5.バギング

バギングは、アンサンブル学習を行う際に決定木を適用するアルゴリズムのことである。 これは、データのランダムサンプリングを繰り返すことで無作為に決定木のサンプリングを行います。

6.ランダムフォレストのメリット、デメリット

ランダムフォレストのメリット

  1. ノイズに強い
  2. 表現力が高い
  3. データ量が多くても高速に動く

ランダムフォレストのデメリット

  1. 説明変数が膨大
  2. 説明変数をランダムに抽出するためデータと変数が少ないとうまく機能しない

7.私見

ランダムフォレストは説明変数がある程度ないといけない面はあるが、機械学習における分類、 回帰、クラスタリングに用いられるほど汎用性の高い便利なモデルであると考える。

1.重回帰分析の定義

重回帰分析とは、統計上のデータ解析手法の1つであり、 単回帰分析とは異なりある結果(目的変数)を説明する際に、 関連する複数の要因(説明変数)のうち、どの変数がどの程度、 結果を左右しているのかを関数の形で数値化し両者の関係を表し、 それを元にして将来の予測を行う統計手法のことです。

2.重回帰分析の使用用途例

  1. ビジネスで売上を予想する
  2. 身体検査で体重の予測を行う
  3. イベントの参加人数を予想する

3.重回帰式の表し方

重回帰分析は目的変数をyとおき、複数個の説明変数をxi(i=1,2,3...)とする際に、 以下の式で表す事ができます。( 説明変数は3つとした場合)

y=β0+β1x1+β2x2+β3x3

4.重回帰分析の手順

例として、カフェをこれから経営する予定のjさんがいると仮定します。
1.これからjさんはどのくらい売上が成り立つのか知りたいと考えました。
この際まずは、目的変数を決定します。この例では、目的変数は売上高です。

2.jさんはカフェを経営するために売上高に関連しそうなデータを収集する必要があります。
売上高を予想するには、都市人口、競合店舗、店舗面積、座席数、従業員数、メニュー数、利益率、広告費 などのデータが必要です。これらのデータは説明変数と呼び、目的変数が決まった後に説明変数を決定します。

3.これらのデータが目的変数を出すのに必要なのか否か検討する必要があります。
説明変数のデータの精度を上げるにはステップワイズ法で最適なデータを探します。 ステップワイズ法は、はじめに最も有効な説明変数を1個採用します。 その後まだ採用されていない説明変数の内で最も有用な説明変数を1個採用します。 これを繰り返し行うが最初の方で採用された説明変数も不要になる場合があるので採用された変数を 取り除くかどうかを確認する方法です。

4.これによって決めた説明変数をエクセルのツールを利用します。
エクセル以外にもネットにある計算ソフトも使うことができます。

5.以上のものを使い方程式に落とし込むと
Y=0.35✕店舗面積+0.33✕座席数+0.55✕従業員数.....+0.77

売上高  回帰係数  回帰係数  回帰係数     定数項

(数字は例です) 定数項は説明変数の影響を受けないベースの売上高の事です。

6.この数式をを元にjさんは売上高を高める方法として説明変数の寄与率の高いものに予算を多めに配分して寄与率の低いものは予算の配分を少なくするなどの調整を行います。
以上のような手順で分析を行います。

5.私見

私見では、単回帰分析に比べて重回帰分析は複雑さがあるため、 単回帰分析のように直線を引いて直感的に理解しにくい面がありますが、 いくつかの説明変数を用いて目的変数を割り出す事ができるという大きなメリットがあります。 特に重回帰分析はマーケティングで応用されることが多く、売上高の予想などに向いていることから ビジネスマンに最適かつ多様な面で使う事ができると考えられます。

1.SVMの定義

SVMとは、パターン認識の手法を用いて物事を分類することである。 パターン認識は事前に学習したデータを用いて、 新たなデータがどこに属すものかをあてはまる手法である。

2.分類する線を引くイメージ

集めたデータを元に最も適した線を引く。 クラス1に分類するものとクラス2に分類するものの間に 識別境界線を引くことで2つのクラスを分けることができます。 

3.識別境界線を引く方法

では、どのような基準で識別境界線を引くことができるのであろうか。 ハードマージンと呼ばれる関数が最大値になるベクトルが識別境界線となる。 つまり、マージンは、2クラスのデータの中で最も他クラスと近い位置にいるもの (これをサポートベクトルと呼ぶ)と識別境界f(x)=0との間のユークリッド距離のことです。 ただマージンを最大化して境界線を引くだけでは、境界線が平行移動すれば片方のクラスが 大きくなり、もう片方のクラスが小さくなる問題が生じる。 そのため下のグラフの赤いサポートクラスをd1と置き、青いサポートクラスをd2と置く。 そしてd1とd2を2で割れば最適点oが導かれる。この最適点oを通る識別境界線が クラス1とクラス2を分類するための最も適当な線となる。 image

4.識別境界線を用いて分類することができる例

  1. 迷惑メールと通常のメールの区別
  2. 郵便番号を認識して分類する
  3. 顔認識ができる。事前に画像ピクセルから出された値から顔を否かを識別できる。

5.私見

私見では、SVMを応用することであらゆる画像を認識して対象のものか否かを区別できる 便利なツールとして用いることができる。 近年のアマゾン問題における過度な労働から機械化を進める大きな要因になると考える。 例えば、画像認識を用いれば、ダンボールの位置や向きやサイズの状態を画像が判別して振り分け作業が可能となる。 この技術が発展すれば人手が多く必要な工場では機械が導入され労働状況の改善や企業の生産力の工場に寄与することとなる。

今回は特定のモデルではなく、パラメーターチューニングというテクニックについて解説したいと思います。

パラメーターチューニングとは、特定のモデルにおけるパラメーター(例:Decision Forest Model における決定木の数)を調節することで、モデルの精度を上げていく作業です。実際にモデルを実装する際は、与えたれたデフォルト値ではなく、そのデータで一番精度が出るようなパラメーターを設定していくことが重要になります。その際、一回づつ手動で調節するのではなく、チューニングモジュールを使うことで最適なパラメーターが比較的楽に特定できます。

具体例

具体的な例を見ていきましょう。

今回は他の場所でも触れたFast Forest Quantile Regressionを使います。

通常、Microsoft Azure ML で初めに使う場合、デフォルトのパラメーターが設定してあります。

下の図からわかるように、このモデルのデフォルトは決定木が100, それぞれの木における葉が20, 回帰をする分位が四分位であることがわかります。

Microsoft Azure Machine Learning

ここで、一番上の"Create Trainer Mode" を"Single Parameter"から"Parameter Range"に変えると、以下のように切り替わります。

Microsoft Azure Machine Learning

ここでは、パラメーターを調節するにあたって、決定木の数を16から64、葉の数を16から64と調節していきますよ、ということがわかります。ここに好きな値を自分で追加することも可能です。

次に、"Tune Model Parameters"のモジュールを使って、実際にチューニングを行なっていきます。このモジュールも、以下の何種類かの設定からチューニング方法を選択することができます。

・Entire Grid - パラメーターの全ての組み合わせを順番に試していく。網羅的にチューニングができるが、その分時間がかかる。

・Random Grid - ランダムに候補を決め、その中で網羅的に行う。計算量を減らせるが、効果はEntire Gridとほぼ同等であることが証明されている。

・Random Sweep - ランダムにパラメーターを使用していく。計算量を減らせるが、必ずしも最適なパラメーターの組み合わせを探せるとは限らない。

理想的にはRandom Gridを使うのですが、時間節約のため今はRandom Sweepを使い、組み合わせを10種類試すように設定します。それでも、実質的にモデルを10回学習させ直しているのと一緒なので、非常に時間がかかります。僕の場合1時間弱かかりました。

Microsoft Azure Machine Learning

では、パラメーターチューニングを行なったモデルとデフォルト値のモデルを比べていきましょう。下の図のようにモジュールを繋ぎます。左側のデフォルト値を使ったモデルと、右側のチューニングを行なったモデルを、最後に比較しています。

Microsoft Azure Machine Learning

結果を見てみましょう。

上の列がデフォルト値のモデルで、下の列がチューニングされたモデルになります。比べてみると、チューニングされたモデルの方が誤差が約1/2になっていることがわかります。一度チューニングすると、その後同じデータに同じモデルを使うときに、より良いパラメーターを用いることができます。

Microsoft Azure Machine Learning

実際にどのパラメーターが一番精度が高いのでしょうか。今回は10種類試すように設定したので、結果が10列分表示されるはずです。

一番右側の誤差を比べてみると、決定機の数=24, 葉の数=46などが一番誤差が小さいことがわかります。このパラメーターが上の図の比較で使われています。今回はRandom Gridを使ったので、この組み合わせが最適なパラメーターとは限りませんが、デフォルト値より誤差が半分になったといことで、大幅な改善と言えるでしょう。

Microsoft Azure Machine Learning

以上、パラメーターチューニングについてでした。時間がかかる作業ではありますが、精度を高めるためには是非活用したいテクニックです。


その他のMicrosoft Azure Machine Learning Studioでやってみた記事も参考にしてください!
決定木アルゴリズムCARTを用いた性能評価
ロジスティクス回帰を用いた Iris Two Class Dataの分類
分位点回帰を用いた飛行機遅延予測
ランダムフォレスト回帰を用いた人気ブログタイトル予測

このアーカイブについて

このページには、2019年7月に書かれた記事が新しい順に公開されています。

前のアーカイブは2019年6月です。

次のアーカイブは2019年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。