2021年01月16日

競馬AI開発めも

まずは@A検索部をちょこちょこ書く。
ついでにベイズ最適化とハイパーパラメータ最適化の勉強
optuna+Postgresのやり方調査
→optuna lightgbmTunerというのもあるみたい。Stepwise Tuning
 optuna側のlightgbmを使うわけだけど、最適化にかかる時間とか考えると絶対こっちのが楽だし速いな。
 optuna.integration.lightgbmのAPI良く見たらlightgbmのtrainのみサポートとなってる(泣
 Dataframe+fit版できたらDatasetを使うtrain版も作るか・・・
 →train。LambdaRank用Datasetを作る際にgroup=でQueryデータ渡すだけ。あまり違いは無さそう。
  Return値はBoosterクラス。ここを見る限りBoosterモデルのロード保存追加学習も特に問題はない。
  ただしoptuna.integration.lightgbm.trainの戻り値はAPI見ても良くわからない。
  optuna.integration.lightgbm.LightGBMTunerにはget_best_booster()はあるがセット方法は不明。
  lightgbm.trainの互換ならoptuna.integration.lightgbm.trainのinit_modelでBoosterクラスをセットできるかな?
  自己解決
  optuna.integration.lightgbm.trainのソースを読むと
  auto_booster = LightGBMTuner(*args, **kwargs)
  auto_booster.run()
  return auto_booster.get_best_booster()
  となっているので、trainで渡された引数をそのままLightgbmTunerに渡してインスタンス生成し、最適化しbest_boosterを返してくれるっぽい。よって保存ロード学習継続もノーマルLightgbmと同じ。
 という訳で取りあえずDataSetのtrain版を先に作ることに決定。
 まずはAを回帰で実装し古いデータで学習。Aの学習モデルで@の特徴量追加するよう@をランク学習で実装
 Aはマルチ目的変数になりそうなのでJetson AGX XavierのcuDNN使ってやってみたい気もする。

@着予測モデル
 ある程度の固まり単位でレース/評価スコアを検索 ※各環境の学習速度でレース数を調整
 出走馬/競走馬を検索
 各出走馬の過去レース/評価スコアを検索 ※当該レース日未満のレース対象で3~5走くらい
 目的変数を色々試す。※着順はいまいち面白味ないし、標準化した着タイム差あたりも試したい。
 ハイパーパラメータ探索調整

A順荒れ予測モデル
 ある程度の固まり単位でレース/評価スコアを検索 ※各環境の学習速度でレース数を調整
 各券種の的中データと配当を検索
 目的変数を色々試す。※結局は着馬の人気順/単複オッズ合成か配当でみるしかないと思うので、単勝と馬連の配当予測か1-3着の単オッズ平均あたりでまずやってみる
 ハイパーパラメータ探索調整

B買い目予測モデル
 @Aのトレーニング検証が終わってから。@Aの検証対象レースより後のレースを学習対象にしないとまずい気がする。
 各レースで@A予測。馬券毎に@の着スコアの組とAの予測配当で学習
 目的変数は未定 ※取りあえず当たりハズレの0/1か的中馬券とのユークリッド距離を標準化したものを想定

posted by 平場長 at 10:02| Comment(0) | 開発めも | このブログの読者になる | 更新情報をチェックする

2021年01月15日

開発めも

どうせなら買い目も券種ごとにランク学習か強化学習させればいいんじゃないかという気もしてきた。

競馬場ID 予想したレーススコア 組ID 組1着率か着スコア 組2着率か着スコア 組3着率か着スコア 現在配当→予測スコア順

どっちかというとこっちのほうが欲しい機能だし。

馬券結果は当たりハズレの2値なんだけど、もしかすると惜しいとかあるし結果を何らかの数式でユークリッド距離的なものを算出するほうが面白そうな気はする。
posted by 平場長 at 08:12| Comment(0) | 開発めも | このブログの読者になる | 更新情報をチェックする

2021年01月14日

Windows10環境のLightGBM-GPU対応と開発環境調整

とりあえずWindows10開発環境の整備。

LightGBMをgitからソースコードを取ってきてGPU対応ビルドする。

ほぼ公式手順通り

GitWin
Visual Studio 16 2019
Cmake
Boots1.75-mvc14.2-64
AMD App SDK3.0 ※AMDの場合
NVIDIA CUDA Toolkit ※NVIDIAの場合
をインストール

Python環境は今は適当にAnaconda3にしてるので
Anaconda Powershell Promptから

git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM\python-package
※AMDの例 AMDのビルド例少ないのでやってみた
python setup.py install --gpu --opencl-include-dir="C:\Program Files (x86)\AMD APP SDK\3.0\include" --opencl-library="C:\Program Files (x86)\AMD APP SDK\3.0\lib\x86_64\OpenCL.lib" --boost-root="C:\local\boost_1_75_0" --boost-librarydir="C:\local\boost_1_75_0\lib64-msvc-14.2"

これだけ。

注意点
open-clのincludeファイルのパス
open-clのLibのパス
boostのrootパスとLibのパスは適宜読み変え。
 ※AMD APP SDKがなければ
  https://github.com/KhronosGroup/OpenCL-Headers
  からCLのヘッダファイルを取ってきて
  https://github.com/KhronosGroup/OpenCL-ICD-Loader
  のincludeにぶち込んでからcmake→Visual StudioでビルドしてみてOpenCL.libができたので
  これ使ってもいいような気もする。

なおEclipce+pyDevの開発環境でAnaconda3側のPythonを使うように設定すると
何故かimportのところで色々コケてしまうのでちょっと焦ったけど
環境変数Pathに
C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\Library\bin
あたりを追加するとEclipseから特に問題なくビルドしたLightGBMを使った機械学習のサンプル実行ができるようになった。
あと一応numpyのmkl-serviceもcondaで入れといた。

なお今週は案件対応が色々あってコードなかなか書けないので
サンプルソースを幾つか取ってきて速度感を見るくらいかな。

あとはGoogle ColabratoryのLightGBM-GPU対応のテストかな。
Google ColabもUbuntuなので基本はUbuntuの手順。
Winと同じようにGitからソース取ってきてcmake→make→python setup.py install

例)!はシェル実行指定
!git clone --recursive https://github.com/Microsoft/LightGBM
%cd /content/LightGBM/
!mkdir build
!cmake -DUSE_GPU=1 #avoid ..
!make -j$(nproc)
!sudo apt-get -y install python-pip
!sudo -H pip install setuptools pandas numpy scipy scikit-learn -U
%cd /content/LightGBM/python-package
!sudo python setup.py install --precompile

  

posted by 平場長 at 13:53| Comment(0) | 開発めも | このブログの読者になる | 更新情報をチェックする