bg=”none”]一般化線形モデルをPythonで実装したいな...。ついでに一般化線形モデルそのものについて知っておきたいな...。[/chat]この記事では、上記のような悩みを解決していきます。想定している読者は、上記のとおりです。この記事では「一般化線形モデルの解説とPythonの実装方法」を紹介していきます。Rでの実装はよく見るけど、Pythonの実装は少なくて探すのが大変かと思います。この記事を読めば、Pythonによる実装方法だけでなく、一般化線形モデルそのものについても分かるようになります。一般化線形モデル(GLM)の実装コードまずは、Pythonで一般化線形モデル(GLM)を実装するコードから見ていきましょう。実装してしまって、そのあとで理論を突き詰めていく方が、理解するには割と近道だったりします。使用するデータSIGNATEのお弁当需要予測データを使いますので、同じ環境下で動作確認したい方は、ぜひ会員登録して、データセットを取得してきてください。ちなみに中身のデータセットは、こんな感じです。※なお、精度とかは完全に無視しています。使い方だけって感じです。GLMを作成してみるとりあえず、Pythonを使ってGLMを作成するまでを見ていきます。statsmodelsというPythonライブラリを使うと、めちゃくちゃ簡単に書けます。AICを確認result.aicこんな感じですね。このコードでは、一般化線形モデルの作成〜モデルの評価(AICの確認)までをおこなっています。formulaとか意味不明かもしれませんが、そこらへんで書いている部分は、後ほど詳しく紹介していきますね。作成したGLMを使って予測までおこなう次は、作成したGLMを使って、実際に予測までやっていくコードを紹介していきます。notebookで書いているものをコピペしたので、若干分かりにくいかもしれないですが、一般化線形モデルの作成〜予測結果の可視化までをおこなっています。予測結果の可視化までやってみると分かりますが、かなりひどいモデルが出来上がっています...。今回はもともと数字データになっていたtemperatureを使いましたが、他のデータを数値化してあげて学習してあげると、また結果が変わってきますね。一般化線形モデル(GLM)とは?一般化線形モデル(GLM)は、残差がどんな確率分布に従っていても、利用できるモデリング手法です。いうのも、(正規)線形モデルでは「残差が正規分布に従っていることを仮定」しています。言うまでもなく、残差が毎回のように正規分布に従っているはずもないので、一般化線形モデルを使って「残差が正規分布に従っていない場合でも、線形モデルを使えるようにした」といった感じです。リンク関数1つずつ見ていきましょう。確率分布ここで言う確率分布は、「応答変数が従う確率分布」のことを指しています。言うと、下記のような数式の左辺Yが従う確率分布のことです。お弁当の売り上げ個数などの離散データでは二項分布やポアソン分布を使うし、株価の値動きといった連続データには正規分布やガンマ分布を使ってあげます。下記のような説明変数とパラメータ線型結合で表される式です。これまたざっくり言うと、よくみる下記のような数式の右辺に該当する部分ですね。リンク関数ただ、Y=aX+bのような式を、そのまま使おうとすると不都合が生じてきます。お弁当の売り上げ予測の場合だと、売り上げでマイナスになる可能性はないですよね。Y=aX+bのままだと直線になるので、言うまでもなくマイナスの値を取ることになります。線形予測子を使って応答変数yを説明してあげようとするんだけど、うまくモデルに当てはまらないと言う状況になってしまいます。このモデル化のときに生じる問題を解決するのが、リンク関数Gです。数式で表すと、下記のとおり。G=logであれば、下記のような式になります。説明してあげたかったYについての式に変換すると、下記の式になりますよね。このように変換できれば、Yがマイナスの値を取ることはなく、もともと直線でしか表現できなかったのが、曲線で表現できるようになります。確率分布によって、だいたいリンク関数が決まっている件さらに、リンク関数は、応答変数が従う確率分布によって、あらかた決まっています。確率分布が決まってくれば、必然的に使用するリンク関数も決まってくる感じです。一般化線形モデルの構成要素とstatsmodelsの対応ここまで読んでいたら分かったかもですが、一般化線形モデルの実装に使っていたstatsmodelsとの対応関係を見ておきたいと思います。sm.families.Poisson(link)上記のとおりです。リンク関数はポアソン分布の場合、デフォルトで対数関数に設定されているため、今回は記述しませんでした。別途リンク関数を設定してあげるなら、確率分布の引数に渡してあげましょう。それでは、この辺でおしまいにします。寄稿、記事の掲載依頼はお問い合わせページからお願い致します。当サイトで使用する「仮想通貨」とは、「暗号資産」のことを指します。当サイトで使用する「仮想通貨」とは「暗号資産」のことを指します。当サイトで掲載している情報に基づいて被ったいかなる損害についても、運営者及び情報提供者は一切の責任を負いません。保証されたものではありません。