次回、別のプログラムで、この'digitslearnt.pkl'をロードしてテストしてみよう。テストデータもセーブしておこう。open('digitstestdata.pkl','wb')pickle.dump([xtest,yans],of)of.close()こんどは、2つのオブジェクトをセーブしないといけないので、リストにすることで、ひとつのオブジェクトに見えるようにした。ファイルが2つできた。digitstestdata.pkl今回は、ここまで。次回、これらを読み込んで、テスト可能かどうか確かめよう。著、岩波書店)という、とても分かりやすい統計モデリングの入門書を、さらに分かりやすくするために読書メモをまとめたものです。今回は第3章、一般化線形モデル(GLM)についてのまとめの三回目です。この章ではポアソン回帰について説明がされています。ポアソン回帰によって得られるのは、説明変数と応答変数の分布の関係です。変数が変化すると別の変数の分布が変化するという、結構複雑な関係が得られるわけです。分布そのものにも興味はありますが、やはり一番興味があるのは、分布の中でどこが一番確率が高くなるかです。そこで、本の中で使われているサンプルデータを使ってポアソン回帰をやってみて、得られた分布の中の一番確率が高い場所をプロットしてみました。コードはRで書きました。yl)実行すると以下のようなグラフが得られます。分布は大きな値を取るようになります。増加に従って増えているのが分かります。正の相関の一面が見られますね。範囲を広げてみました。細かい増加は分かりにくくなりましたが、全体的な指数関数的増加がよく分かるようになりました。Learningを色々いじってきて、なんとなく学習出来ているのは分かったのだが、学習には結構時間が掛かる。そのため、一度学習した結果をファイルに出力しておき、必要になったときにファイルを読み込むことで学習することなく賢くして、使いたいものである。いうことで、学習結果(脳)のファイルへのsave/loadについて検討してみよう。そのために、いままで利用してきたプログラムを使おう。いままでのプログラムは、学習部分も、学習結果の判定のためのテスト部分も1つのファイルになっていたので、まずは2つの部分に分けようと思う。このとき、学習結果が入っているオブジェクト(脳)は同じでなければならず、プログラムではそれを表すクラスが使われていた。手書きデータの場合には、次のクラスがそれだ。h2今までのファイルは、「学習&セーブ」と「ロード&テスト」の2つのファイルに別れる。このとき、上記クラスは共通だから、これを"digitschain.py"という名前のファイルにする。Pythonのモジュールは異常に簡単だ。上のように、何でも良いから、.pyがついたファイルにしてしまえば、それだけでモジュールになってしまう。他の言語のように、モジュールにするにはあれこれ宣言しないとダメとか全然ない。そのモジュールをインポートすれば使えるようになる。記述フォーマットはいくつか種類があるが、モジュール名(=ファイル名)と、インポートする物を記述するのが次である。DigitsChainということで、実際にimportしてみた。クラスだけのファイルはダメだった。Chainの1行だけを加えたら、一応エラーは出なくなった。L.やF.が使われているのにエラーにならないということは、メソッドを定義だけでは中身は検査されず、エラーにならないようだ。一応、おまじないを最初に全部加えておいた。学習内容をファイルに書き出すことをやってみよう。Tweet前回、学習の進行状況をプリント出力できるようにしたのだが、数字の羅列を見るのは面倒なので、グラフとして見えるようにしよう。そのために、学習ループの中で、リストresultに、[周回数,学習正解率,テスト正解率]を毎回追加するようにした。(i,lck,tck))以上で集めたデータを、matplotlibで表示しやすいように分解し、表示するようにした。グラフの内容をそのままpngのファイルとして出力もした。result]plt.plot(ilist,lck,color="blue")plt.plot(ilist,tck,color="red")plt.savefig("digits0graph.png")plt.show()そして出力された画像がこれである。青が学習データでの成功率で、赤がテストデータでの成功率である。.90位まで上昇し、その後、上昇ペースがどんどんゆっくりになっている。青と赤の差が乖離誤差と呼ばれ、この差が激しくなると、過学習に陥っているという。過学習とは、模擬試験には強いのだが本番はダメとか、練習の王者で本番ではメダルが取れないという感じとでも言えばよいだろうか。著、岩波書店)という、とても分かりやすい統計モデリングの入門書を、さらに分かりやすくするために読書メモをまとめたものです。今回は第3章、一般化線形モデル(GLM)についてのまとめの二回目です。この章にはポアソン回帰の例が載っています。本の中で使われているサンプルデータがここで公開されているので、解説されている通りにポアソン回帰をやってみました。コードはRで書きました。pchs)実行するとポアソン回帰を行い、得られる分布をプロットしてくれます。実際にポアソン回帰をやっているコードは以下の部分です。最尤推定されたパラメータです。ポアソン分布するかが分かります。その分布は下図のようになります。分布が大きな値をとるように移動しているのが分かります。正の相関があるのですね。Tweetとりあえず、前回で学習ができているらしいことが確認できた。それは、延々と学習した後で、テストデータとして温存しておいたデータにより確認しただけだ。途中の学習状態、つまり、成功率がどのように変化していくのかを見たい!ということで、最後にあった成功率を求める部分を、関数としてまとめてみた。正解率データ、正解、モデルを与えると、このモデルを使ってデータを評価し正解との一致率を返す。この関数(クラス内でないので、メソッドとは言わない)は、テストデータによる評価に使えるのだが、この形式にデータを合わせさえすれば、学習データを用いた場合の正解率も計算できる。いうことであるが、学習データ(教師データ)の正解の形式が違っているので、リストtransに教師データの答えを入れた。0]]必要な追加は済んだので、最後の部分を書き換えた。(i,check(xtrain,trans,model),check(xtest,yans,model)))forループの制御変数iを、forループを抜けてからも使っている。C言語ならエラーになるところだが、Pythonではそんなことはないのだ。これで、こんな感じに動いた。数字は、「繰り返し回数、教師データでの正解率、テストデータでの正解率」である。成功率上昇中なので、もっともっとループを繰り返してみた。97%を超えるのがやっとであった。過学習状態になっているのが分かる。これ以上学習させても、このモデルでは成績は微小な変動を繰り返すのみであった。著、岩波書店)という、とても分かりやすい統計モデリングの入門書を、さらに分かりやすくするために読書メモをまとめたものです。今回は第3章、一般化線形モデル(GLM)についてまとめます。この章では主にポアソン回帰について解説されています。ポアソン回帰というのは、ポアソン分布の平均がリンク関数という関数を通してデータと関連するモデルを使った回帰です。モデルが複雑になったので、この回帰で得られる物が何なのかをグラフに描くコードを用意しました。コードはRで書きました。}}この例では、説明変数xに対してyが分布する場合について考えています。リンク関数を作るコードは以下のようになります。パラメータb1、b2を与えると、そのパラメータを使ったリンク関数を返しています。}}リンク関数は引数xを取って、パラメータと足したり掛けたりした後、累乗を計算する関数です。ポアソン回帰ではリンク関数の戻り値を、ポアソン分布のパラメータとして使います。リンク関数があれば、あるxに対するyの分布が得られます。yを引数に取りyが起きる確率を返す関数が得られます。以下の関数により得られる関数でyの起きる確率が計算されます。}}これがポアソン回帰のモデルです。後はリンク関数で使われるパラメータを最尤推定で求めれば良いわけです。今はとりあえずモデルの具体例が見たいだけなので、パラメータは自分で与えて、様々な値についてグラフをプロットしてみました。コードを実行すると、いろいろな場合についてグラフがプロットされます。