FC2ブログ

WekaをWindows XP上のEclipseでビルドしてみた

Wekaを自前(Windows XP上)でビルドしてみようと思ったのですが、JavaもEclipseもSubversionも殆ど触ったことがありません。SourceForge_net weka » Eclipse 3_4_x (Subversion)のページを見て最新版をEclipseに取り込んでみようとしましたが、そのままでは案の定うまくいきませんでした。わけのわからないまま色々試行錯誤していたら、とりあえずEclipse上でビルドできるようになったのですが、手順を忘れてしまいそうなのでメモしておきます(わけがわかっていないので、たぶん所々無駄なことをやってます)。

必要なもの



  • JDK 1.6.0_11

  • Subversion

  • apache-ant

  • Eclipse


SubversionとantのインストールはDevelop-environment - mcodepf Multicode Platform - dev_tyzoh_jp様のページを参考にしました。システム環境変数には、ANT_HOMEにapache-antのインストールフォルダを、JAVA_HOMEにJDKのインストールフォルダを、PATHにJDK、apache-ant、subversionインストールフォルダ下のbinフォルダをそれぞれ指定。
Eclipseを起動しようとすると、「JVM terminated. Exit code=1」というエラーが出て起動できなかったので、EclipseではじめるJavaプログラミング入門様の追補情報を参考に、eclipse.exeのショートカットを作成しました。

リポジトリからのチェックアウト


私の環境ではSourceForge_net weka » Eclipse 3_4_x (Subversion)のページの通りやってみても、古いバージョンのものも最新版のものもEclipseに取り込むことができませんでした(ant exejarでweka.jarを生成するところまではできるので、antだけを使う分には問題ないと思う)。たぶん最初のチェックアウト時に指定する出力先ディレクトリの階層が間違っているのだろうと思います。原版ではsvn co http://~/weka wekaとなっていますが、svn co http://~/weka src/weka としないとうまく行かないみたいです。
具体的には、
D:\Weka-Build\Weka
みたいなフォルダを作って、D:\Weka-Build\Wekaフォルダに移動し、
svn co https://svn.scms.waikato.ac.nz/svn/weka/trunk/weka src/weka
を実行(古いバージョンのものをビルドしたいときはhttps://svn.scms.waikato.ac.nz/svn/weka/tags/dev-3-5-8/wekaとか)。次に、
D:\Weka-Build\Weka\src\weka
へ移動して、
ant exejar
を実行(→D:\Weka-Build\Weka\src\weka\dist\weka.jarが生成される。これをそのまま実行することも可能)。

Eclipseのセットアップ


あとは、SourceForge_net weka » Eclipse 3_4_x (Subversion)の[before November 12, 2008 Setup Eclipse]の記述の通りにやっていけばうまくいくようです(私がダウンロードしたEclipse 3.4.1ではpreferences(Filtered)のウィンドウが出現しません。あと、フォルダは自分の作ったものを指定する)。
実行するときはMain classにweka.gui.GUIChooserを指定しています。
また、Eclipseメニューの[Run]→[Run configurations...]のArgumentsタブでVM argumentsに
-Xmx1024m
等を指定して、VMに割り当てるメモリを増やしておいたほうがいいと思います(最新版の場合Weka GUI ChooserにHelpメニューができていて、HelpのSystemInfoのMemory Maxの値を見れば割り当てメモリ量を確認できる)。このあたりの設定は、配布されているWekaのzip圧縮アーカイブに含まれているRunWeka.batを見たほうが早いかも。

Javaがわからないので、ビルドできたからといって何かできるというわけでもないのですが、極端な値や特定の日のデータばかりを抽出したりというミスを防ぐことができるように改造できればいいなと思います。
スポンサーサイト



RWekaを使ってみた。

統計処理言語Rをだいぶ前にインストールしたものの、これまではWekaで事足りることが多くて殆ど使っていませんでした。
しかし、古いExcelでは扱えない行数のデータの統計を取りたいときに詰まってしまったので、久しぶりにRを使ってみることにしました。
Wekaのarff形式ファイルをRに読み込む必要性が出てきたので、RWekaを入れました。「jvm.dll」というファイルが必要な旨の表示があって手間取ったのですが、どうやら環境変数のPATHにJavaランタイムのjvm.dllへのパスを入れればインストールできるようになるみたいです。他にrJavaというライブラリも必要です。
RWekaをインストールするとread.arffでarff形式のファイルを読み込めるようになります(変数にマルチバイト文字列が含まれているとうまく読み込めないことがあるみたいです。)。arffじゃない普通のcsvファイルをRコマンダーで読み込むとすると数値の列が因子扱いになってしまうことがあったのですが、read.arffだとarffファイル内の指定どおりに分類されるようです。
RWekaはRからWekaを使うためのものなのですが、私にとってはWekaは単体で使ったほうが便利なので、RWekaは専らarffの読み書きのみに利用することになりそうです。

成果出ないorz

これまでは以下のような手順で新しい売買アルゴリズムを開発していたのですが、適当な思いつきが基になっているせいか、最近ではうまく行かず、壁にぶち当たっていますorz。

  • 1. 基本となる単純なストラテジーを思いつきで作成

  • 2. そのストラテジーに基づいて、シグナルが発生したときの株価などをcsv形式でファイル出力

  • 3. Excelで詳細を加工(乖離率などを出す)してcsv形式で出力し直し

  • 4. Wekaで分析し条件を決定

  • 5. 自動売買プログラムに組み込み


連休中に色々やってみたのですが、今のところ良いものは出来ていません。思いつきで作成というのが悪いのだと思います。もう一年以上自動売買をやってきて、それまでにいくつもの売買アルゴリズムを作成しましたが(殆どはゴミです)、もう新しく思いつくようなものも無く、ストラテジーのネタが切れてしまいました。
Wekaのようなものを使っているのであれば、そもそもこんな単純な思いつきで作成をするような方法はやめにして、機械的に無数の条件を作ってその中から良さそうなものを抽出するようにしたほうがいいかもしれません。基本となるようなストラテジーの検索もWekaに任せるような感じです。
そうやって無数の条件で出力されるデータ量を考えるとExcelで計算するのはもう無理に近い状況です。Excel 2007以降では65536行以上のデータも編集できるそうですが、それをまともに計算させようとするとかなり時間がかかって不便そうです。Wekaの方もcsv形式では6万行くらいしか読めないらしいので(「はじめてのweka勉強会 -修正版- - sleeping note」より)、Arff形式で出力する必要がありそうです(csvに毛の生えた程度の形式なので難しくは無い)。ただ正直あまりやる気が出ないなあ……orz(連休中に色々やったのに全く成果が出ていないので徒労感に満ち溢れている)。
                  .,.,.,.
              ,),ツツ''"  "ツシッ,,.
          ,.,.,.,.,;ツ'          "''彡
       ,: ''"'"                 "';、
     ,:'"                     ';
   ,.,'"   彡               ミ   彡
  ,;'"                     ミ     ミ
 ミ       彡   彡         ミ     ミ
 ミ     , 、    ミ   ミ        ミ    、ミ ミ
 ミ    (●ノ      ミ      ミ     ミ  ミ
 }`ヽ、_____゙    ミ   ミ      ミ    ミ  シ
 | "  , <、、 ,.,   ヾヾ       ヾ    ,.ミ゙
 レ '    ゙':;, ヾヾ        ,,,.,ヾヾ .,.ヾ゙
         ゙''-、,,,,..,.,..ミ、,;,,::,:ヾヾ  }゙''}''"
         __, --ノ ト、ゝ   / /
  _,,..,,,,_    `ーー'ノ, ヘ、ヽ   / {
 ./ ,' 3  `ヽーっ   / / -=ニニァ ,、\
 l   ⊃ ⌒_つ  //    //- ヽ \
 `'ー---‐'''''"        ∠/     \ゝ

Wekaで量的尺度の値を指定してインスタンスを抽出する方法

WekaのExplorerで、量的尺度の値を指定してインスタンスを抽出する方法がわかりました。RemoveWithValuesというFilterを使えばできます。
このフィルタはWeka/filters/unsupervised/instance下にあります。このフィルタの設定で、attributeIndexにAttributesの列番号、splitPointに数値を入れてApplyボタンを押すと、そのフィールドで数値未満の値が記述された行が削除されます。invertSelectionをTrueにすると、指定した数値以上の行が削除されます。
結果の確認は、Attributesの列を選択すると、量的尺度の場合は右側に簡単な統計結果が出て、その中にMinimumとMaximumがあるので、それを見ればわかると思います。
あまり使い勝手は良くないので、少ないデータだったらEditで編集したほうが楽かもしれません。間違ってもUndoを押せば元に戻せますが。

Wekaを使ってみた感想

このごろ、Wekaを使って売買アルゴリズムを最適化できるかどうか検証しています。今のところの感触では、一々微調整してバックテストを繰り返すよりも遥かに楽に最適化できそうです。売買の基本となっているストラテジーのみを残して、それを最適化するルールをWekaで求めたところ、数日程度の作業でそれなりの成績になる売買アルゴリズムを構築できました(ただ、現在採用している売買アルゴリズムよりも性能が低く、検証も甘いので、まだ実際の売買では採用しません)。
贅沢かもしれませんが、使っているうちにちょっと不満も出てきました。Wekaでは決定木を自動生成しますが、分岐のルールを表示してくれるだけで、ノードの中身に直接触れることができないようです。おかしな枝が生成されてきた場合に、その枝に来るまでに抽出されたデータを出力してくれればいいのですが、現状では提示されたルールを見ながらPreprocessタブのEdit機能を使って手動で弄るか、Visualizeタブで表示されるグラフを選択してSubmitを押してSaveするくらいしか方法がないようです。Edit機能の列ヘッダ部分をクリックすればソートされるので、ルールにあわせて行を選択して右クリック->Deleteすれば何とかなりますが、正直ちょっと面倒です(他に方法があるかもしれないけど)。せめてSQLのSELECT文みたいなのが実装されていればいいのになあ。
こういう作業をやってくれるMUSASHIというツールもあるのですが、WINDOWS上で開発している私にとってはちょっと敷居が高いです。

フリーのデータマイニングツール Weka

自動売買のアルゴリズムを開発するにあたって、Excelでグラフを書いてデータを眺めるだけでは限界が見えてきました。そこで、Wekaというデータマイニングツールを使ってみることにしました。
WekaはJavaで書かれたフリーソフトです。Windows版はインストーラが付いていて、ほぼ設定なしで動作します(取り扱うデータ量によっては、JavaのVMがメモリ不足になるので、付属のRunWeka.iniファイルを書き換える必要があります)。GUIで扱うことができ、CSVファイルをそのまま読み込んで処理することもできるので、この手のアプリケーションにしては敷居が低いと思います。
まだ決定木を自動生成させる程度のことしかやっていませんが、同種のことをExcel+VBAでやるのは難しいだろうと思います(その手の作りこまれたライブラリが備わっていないことや、速度面や扱えるデータ量の都合で)。
肝心の自動売買については、Wekaでデータを分析させても新しいアルゴリズムを見つけるのは難しそうです。Excel+グラフ+VBAという環境よりは見つけやすいと思いますが、結局は試行錯誤の連続になりそうです。私自身は統計学のことはサッパリわかっていないので出鱈目なやり方になってしまっているというのもあります(参考書みたいなのを買ってきたほうがいいかも)。もとのデータが粗雑なせいもあって、条件を厳しくすると決定木を生成してくれませんし、条件を甘くすると分岐だらけになってしまいます。良さそうな条件が見つかったと思ったら、すでに自動売買に組み込まれている条件だったりします。
とりあえず役に立ちそうなリンクを下に書いておきます。

Weka 3 - Data Mining with Open Source Machine Learning Software in Java
WEKAの配布先です。

How to use Weka tool box
Wekaの動作確認方法、使い方など。

[PDF] WEKAと樹木モデル
Wekaの使い方、主な決定木の簡単な説明。

wekaexample1
線形回帰式のモデル木の使い方。オリジナルなデータによる説明。

weka-jp@weka-jp.info
日本語によるドキュメントらしいのですが、現在繋がりませんorz。