Azure Machine Learningの最近の記事


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

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

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

理論編

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):ランダムフォレスト

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

パラメーターチューニングとは、特定のモデルにおけるパラメーター(例: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の分類
分位点回帰を用いた飛行機遅延予測
ランダムフォレスト回帰を用いた人気ブログタイトル予測

概要

 はじめまして。アクセルユニバースのインターンに参加してる宇田川と申します。機械学習において必須の知識である数理モデルについて、その中でも特に基本的な回帰モデルに関して書いていこうと思います。

 このブログは機械学習を始めたばかり、または興味を持ち始めたばかりの方にわかっていただくようにわかりやすく書きました。事前知識としては機械学習の知識はもちろん必要なく高校数学における数学Bの確率の範囲程度の知識があれば十分です。よって細かい数式を書くことは避けました。回帰モデルのイメージを掴んでいただけたら幸いです。

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

回帰モデルとは

 回帰モデルの説明をする前に回帰の語源について簡単に説明します。
回帰という言葉は英語でregressionと書きます。この言葉は遺伝学者であり統計学者でもある19世紀のフランシス・ゴルトンによって造られました。ゴルトンは、背の高い祖先の子孫の身長が必ずしも遺伝せず、平均値に戻っていく、すなわち「後退(=regression)」する傾向があることを発見しました。これを「平均への回帰」といいいます。ゴルトンはこの事象を分析するために回帰モデルを発明しました。この発明が後に統計学の基礎となり回帰という言葉が誕生しました。

 では、回帰モデルについて書きましょう。回帰モデルとは関数をデータに適用することよって、ある(未知の、予測したい)変数yの変動を別の(既知の、予測するための)変数xの変動により説明・予測するための手法です。ここで登場した、説明したい変数yのことを目的変数、説明するために用いる変数xを説明変数と呼びます。説明変数xの数によって、1つであれば単回帰、2つ以上あれば重回帰という名前がついています。例として目的変数「頭の良さ」に対して、説明変数「大学の偏差値」のみで行うのが単回帰となり、目的変数「頭の良さ」に対して説明変数「コミュニケーション力」、「判断力」、「年齢」、「大学の偏差値」...と複数の説明変数を用いる場合が重回帰になります。

Alt text

1. 単回帰

 単回帰は先ほど説明したように説明変数xが一つになるので式で表すとy=ax+b(aは係数、bは定数項です。a,bをパラメータや回帰係数と言ったりします。a,bを上手に決めると目的変数yの予測がうまくできます。後ほど少し詳しく書きます。)の形になり直線によって目的変数yを予測するモデルとなります。もちろん直線によってyを予測することになってしまうので単回帰のみで分析することはほぼありません。単回帰によって大まかな予測することで大まかな推測ができその後、他のモデルによって精度よく分析をします。単回帰は式がとてもシンプルなので簡単に大まかな予測ができます。

Alt text

上の図からわかるように真の値と予測をしたyの値では誤差(上の図の緑線)が生じてしまいます。この誤差をεで表すと、先程のy=ax+bという式はy=ax+b+εと表せます。つまり、ε=y-ax-bとなり、この誤差は小さくしなければ良い予測ができたとは言えません。この誤差εを最小にするためのパラメータa,bを決めるのに有名な方法として最小2乗誤差法があります。最小2乗誤差法を説明をすると数学的になり数式が増えてしまうのでここではやめておきます。詳しく知りたい方は こちらのスライド21枚目を参考にしてみて下さい。ここではすでにわかっているn個の(x,y)の組(訓練データといいます。)を用いて最小2乗誤差法により最適なパラメータβ1,β0を求めています。

2. 重回帰

 重回帰は説明変数xが2つ以上になるので式で表すと、説明変数xがn個(x₁,x₂,...,xn. nは2以上)ある時、y=a₀+a₁x₁+a₂x₂+...+an*xn(a₀,a₁,...,anはパラメータ)の形になるのでn種類のxの変数によって目的変数yを予測することができます。説明変数が増えるので単回帰よりも予測の精度が高いのは明らかですね。

Alt text

また重回帰の場合もパラメータa₀,a₁,...,anを誤差が小さくなるように考える必要があり、この場合も最小2乗誤差法が使われています。ここでも詳しく知りたい方は こちらを参考にしてみて下さい。パラメータα,β1,β2,...,βkを求めるために訓練データ(x,y)を用いて計算をしています。

 重回帰の実用例を挙げましょう。

カフェをこれから経営する予定のjさんがいると仮定します。

(1)これからjさんはどのくらい売上が成り立つのか知りたいと考えました。まずは、目的変数を決定します。この例では、目的変数は売上高です。

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

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

(4)以上のものを使い方程式に落とし込むと

Y=0.35✕店舗面積+0.33✕座席数+0.55✕従業員数.....+0.77

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

(数字は例です)

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

(5)この数式をを元にjさんは売上高を高める方法として説明変数の寄与率の高いものに予算を多めに配分して寄与率の低いものは予算の配分を少なくするなどの調整を行います。

このようにして重回帰は利用されます。

3. ベイズ回帰

 単回帰、重回帰(まとめて線形回帰と呼びましょう。)では最小2乗誤差を求めてパラメータを決めていました(パラメータを推定するとも言います)。ベイズ回帰は線形回帰を確率の問題に読み替えることにしました。つまり、最適なパラメータを求めるということは一番高い確率になるパラメータを求めるということになります。ではどのようにして一番高い確率になるパラメータを求めればよいでしょうか。答えはたくさんあるのですが一番シンプルな例として尤度を最大にすることを扱いましょう(これを最尤推定法と呼びます)。

 尤度(ゆうど)の説明からします。パラメータθの確率モデルP(X=x;θ)と、D={x₁,x₂,...,xn}というそれぞれ独立な実現値(実現値は統計的な用語でデータ x を変量 X の値と考えています。)の集合を考えます。尤度はモデルのもとでDが得られる確率のことという意味です。尤度を数式で表すとP(D;θ)=P(X=x₁;θ)×P(X=x₂; θ)×...×P(X=xn;θ)と書けます。

 少し余談ですが、この式は確率を表す式的には何も変わりません。では尤度と確率は何が違うでしょうか。それは、式で表している意味合いが異なります。確率はこれから起きる可能性のあること(事象といいます。)それぞれがどれくらいの割合で起きるのかを表します。一方、尤度とはすでに観測されている(訓練データと呼んでいましたね。)起きてしまったデータの確率を考えています。

 余談はこれくらいにして最尤推定の説明をしましょう。最尤推定は尤度P(D;θ)を最大にするパラメータθを求めることです。このθを求めるときにP(D;θ)が積の形になると扱いづらいので両辺に対数をとって和の形にしたものlogP(D;θ)=logP(X=x₁;θ)+logP(X=x₂; θ)+...+logP(X=xn;θ)を対数尤度と言い、最尤推定を求めるときは対数尤度から求めるのが一般的です。

 ではこれを線形回帰において考えるとどうなるでしょうか。ここでは数式をたくさん書くのは避けて結果だけ書きます。先程のパラメータθに当たるところを単回帰ではa,b、重回帰ではa₀,a₁,...,anと考えて、訓練データ(x,y)においてある組(x,y)に対する誤差εがε~N(0,σ²)(これはどの組(x,y)に対しても誤差εが平均E(ε)=0、分散Var(ε)=σ²となり、またある2つの組(x,y)の誤差をε、ε'とするとその共分散Cov(ε,ε')=0と仮定しています。すると誤差εは平均0、分散σ²の正規分布に従うという意味です。このような分布を事前分布と呼んでいます。)として、最尤推定法により計算をしていくと最小2乗誤差法と同様の式が出て最適なパラメータの値は等しく推定することができます。

 ではベイズ回帰ではなぜ確率で考えるという手間を踏んでいるのでしょう。色々なメリットがありますが、簡単なメリットを挙げると、事前分布を考えて推定することができる点です。事前分布は私達がすでにわかっている知識などを考慮し分布を決め打ちするのが通常です。このように私達の知識を推定の中に取り入れられることです。

最後に

 今回は回帰モデル、特に基本的な3つの回帰モデルを書きました。単回帰では式がシンプルである一方、誤差が大きく良い推定ができませんでした。それを克服したのが重回帰でした。重回帰は誤差が小さく良い推定ができる一方、式が複雑になってしまいました。またベイズ回帰では事前分布を考えることにより私達の事前知識を数式に取り入れることができました。このように基本的な3つの回帰モデルにはメリット・デメリットがありました。今後、新たなモデルを学ぶ上でも3つの回帰モデルは重要になるので必ず理解しましょう。次回は、今回の基本的な回帰モデルと同じくらい重要なニューラルネットワークについて書きます。

参考文献

機械学習をはじめよう 第12回 ベイズ線形回帰[前編]

Pythonでベイズ線形回帰を実装してみた

回帰分析(単回帰分析)をわかりやすく徹底解説!

尤度とは何者なのか?

このアーカイブについて

このページには、過去に書かれた記事のうちAzure Machine Learningカテゴリに属しているものが含まれています。

前のカテゴリはです。

次のカテゴリはTensorFlowです。

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