clew

どっかの誰かの役にたてばうれしい。

第637回トトくじの予測を DBN でやってみる。 その記録1。

さて、いろいろプライベートってか、まあ仕事やら何やらで忙しいのだけれども・・

少しずつ試していこうというわけです。

やる前から言うのもなんですけど・・おそらく上手くはいかないだろうと思います。

やったことの記録ということでお願いします。

まず手持ちの CSVデータ を array型 のデータに変換します。

やり方は前回記事に書いたとおり。

import csv

input_csv = csv.reader(open("sample.csv", "rb"))

records = [ map(int, x) for x in input_csv ]

print records

1、上のコードを ipython QT console にコピペする。

おっと、忘れるところでしたが、変換の前に ”作業ディレクトリ” を CSVファイル が置いてある場所に変更して置いてください。もしくはファイルを IPYTHON の実行ファイルが置いてあるところへ移動させてもいいと思います。(フォルダのままじゃダメですよ、ばらしておかないと。)

2、コード中の赤いところ・・sample を自分がつけた名前に変える。

3、あとはエンターキーを押すだけ。

これでズラズラと括弧やらカンマが付いた arrayデータ が吐き出されます。

作成しなければならないデータは 3種類。

X = 説明変数(属性のこと)

Y = 目的変数(つまり結果ですね)

以上二つがトレーニングデータとなります。

もうひとつ・・・

X = テストデータ(predict(x))

これは予測するためのデータです。おなじ ”X” ですが混同しないように。

以上 3つのデータについて、それぞれを変換します。

次は DBN.py のコードをエディタに展開します。

私が行った方法は以下。

https://github.com/yusugomori/DeepLearning/tree/master/python

1、上のアドレスにあるファイルをすべてダウンロードする。

2、これをすべて CANOPY の実行ファイルが置いてあるディレクトリにコピー、もしくは移動させる。

3、CANOPY のエディタで DBN.py を開く。

拡張子の関連付けがしてあれば、pythonファイルをクリックするだけで展開されるので楽です。

次はサンプルコードのデータ部分をいじります。

先ほどARRAY型に変換した3つのファイルを置き換えていきます。

私が作成したデータは インスタンス・・・(行のこと)が404あります。(トレーニングデータ)

したがって横にものすごく長く書き込まれます。(単純にコピペしただけ)

インデントはいじらないほうがいいです。(構文エラーになる恐れがあるから)

あと、括弧もちゃんとデータの終わりにくっつけるように書き直しました。

横にはものすごく長くなりましたが、パッと見た目はすっきりしているはずです。

次は  # construct DBN とメモしてある箇所をいじります。

dbn = DBN(input=x, label=y, n_ins=6, hidden_layer_sizes=[3, 3], n_outs=2, numpy_rng=rng)

これがサンプル状態です。

ここで DBN について構築?しているようなので、実際の書き換えたデータに合わせて、こちらも修正してみます。

まず、サンプルデータ は 6行 のインスタンスでした。

おそらく以下のところが該当箇所じゃないかと思います。

n_ins=6

ここを 実際のデータに合わせて次のように変更。

n_ins=404

n_outs=2 という部分は、おそらく出力に関しての事だろうと推測。

私の場合は、おなじ ”2” なので変更はナシ。

残りの部分はデフォルトでやってみましょう。

ちなみに CANOPY でのサンプルコード実行に関して追記です。

この CANOPY では実行に必要なファイルはそのつど出力されるエラーにしたがって読み込めば動きます。

しかし面倒なら、あらかじめ CANOPY実行ファイルが置いてあるフォルダにまとめて展開しておいたほうがストレスがありません。

結果 :

%run C:/Users/mu/AppData/Local/Enthought/Canopy32/App/DBN.py

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

C:\Users\mu\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.0.1.1189.win-x86\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)

174 else:

175 filename = fname

--> 176 exec compile(scripttext, filename, 'exec') in glob, loc

177 else:

178 def execfile(fname, *where):

C:\Users\mu\AppData\Local\Enthought\Canopy32\App\DBN.py in ()

175

176 if __name__ == "__main__":

--> 177 test_dbn()

C:\Users\mu\AppData\Local\Enthought\Canopy32\App\DBN.py in test_dbn(pretrain_lr, pretraining_epochs, k, finetune_lr, finetune_epochs)

158

159 # construct DBN

--> 160 dbn = DBN(input=x, label=y, n_ins=404, hidden_layer_sizes=[3, 3], n_outs=2, numpy_rng=rng)

161

162 # pre-training (TrainUnsupervisedDBN)

C:\Users\mu\AppData\Local\Enthought\Canopy32\App\DBN.py in __init__(self, input, label, n_ins, hidden_layer_sizes, n_outs, numpy_rng)

55 layer_input = self.x

56 else:

---> 57 layer_input = self.sigmoid_layers[-1].sample_h_given_v()

58

59 # construct sigmoid_layer

C:\Users\mu\AppData\Local\Enthought\Canopy32\App\HiddenLayer.py in sample_h_given_v(self, input)

59 self.input = input

60

---> 61 v_mean = self.output()

62 h_sample = self.numpy_rng.binomial(size=v_mean.shape,

63 n=1,

C:\Users\mu\AppData\Local\Enthought\Canopy32\App\HiddenLayer.py in output(self, input)

49 self.input = input

50

---> 51 linear_output = numpy.dot(self.input, self.W) + self.b

52

53 return (linear_output if self.activation is None

ValueError: matrices are not aligned

んー。。。悲惨ですね。。

エラー出まくりで意味が分からん。

マトリクスが整列していない?ここは何となく分かる。

サンプルコードとは並べ方が明らかに違いますから。

こりゃエラーの見方を勉強しなきゃさっぱり進めませんね。

少し調べてみましたが・・

エラーには”どうしようもないエラー”と”例外で処理できるエラー”の二種類があるみたい。

大雑把に分けての話みたいだけど。

たぶん私の場合は、どうしようもないタイプのエラーみたい。

エラー出力画面での数字は、おそらく行番号なんだろうけど元々のサンプルコードと一致していない部分があって「どこがどう変なのか?」ちょっと分かりにくい。

入れ替えたデータに合わせていじるところが他にあるのか?

サンプルはちゃんと動くからね。。たぶんデータがダメなんじゃないか。

なんだかエラーを理解しやすいようにするスクリプト?もあるというか作れるみたいだけど、まだ私には無理なようです。。

がっくり。。