トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 1260

 
Maxim Dmitrievsky:
with katbust - それは通常、テストで> 0.5を返します...いつものように。

katbustで1本の木のforestを確認しましたか? また、katbustはクロスエントロピーの出力や他のエラーは出ますか?

Alglibは5種類のエラーを出します。(以下は、1本の木を使った例です)

アラート: トレーニングセットのエラー推定レポート:relclserror=0.267; avgce=184.207; rmserror=0.516; avgerror=0.267; avgrelerror=0.267。

 

ブースティングは、エントロピーが減少する一方で木の本数を増やし、n回の繰り返しで増え始めたら止める、というように、モデルを複雑にしすぎないような工夫がされています。

エントロピーと任意のカスタムメトリックを与えるが、エントロピーを基に構築される。

英語版のalglibのサイトには、新しく高速なforestがあります。)

 
xgboostの ドキュメントを拝見しました。クロスエントロピーの出力ではなく、
error - Binary classification error rateです。誤った事例)/(全事例)で算出されます。
デフォルトでは、予測値の閾値0.5を使用して、ネガティブインスタンスとポジティブインスタンスを定義しています。
異なる閾値(例えば、0.)を "error@0 "として指定することも可能である。
 
エリブラリウス
xgboostのドキュメントを拝見しました。クロスエントロピーの出力はありませんが
error - 2値分類のエラー率.誤った事例)/(全事例)で算出されます。
デフォルトでは、予測値の閾値0.5を使用して、ネガティブインスタンスとポジティブインスタンスを定義しています。
異なる閾値(例えば、0.)を "error@0 "として指定することも可能である。

そう、そしてここでは分類エラーがデフォルトで使われているようだ

しかし、ブースティングはエラーで停止し、フォレストは事後的に与えるだけで、フルデプスツリーとは区別する必要があります。
 
マキシム・ドミトリエフスキー

ブースティングは、エントロピーが減少する一方で木の本数を増やし、n回の繰り返しで増え始めたら止める、というように、モデルを複雑にしすぎないような工夫がされています。

エントロピーと任意のカスタムメトリックを与えるが、エントロピーを基に構築される。

ところで、英語版のalglibのサイトに、新しい高速なforestを掲載しました。)

新しいalglibはどこにあるのでしょうか。フォーラムのどこかで探せるのでしょうか。この関数のコードを比較するのは興味深いことです。

 
エリブラリウス

新しいalglibはどこにあるのでしょうか - フォーラムのどこかを見ればいいのでしょうか?この関数のコードを比較すると、興味深いことがわかります。

いいえ、C++またはC#です。

http://www.alglib.net/arcnews.php#date_16_06_2018

  • ランダムフォレスト構築アルゴリズムの改良により、従来比2倍から10倍高速化し、桁違いに小さいフォレストを生成できるようになりました。
NEWS Archive
  • www.alglib.net
The news archive contains the list of all news, 44 in total. The latest news are at the news page.
 
マキシム・ドミトリエフスキー

いいえ、c++またはc#です。

http://www.alglib.net/arcnews.php#date_16_06_2018

  • ランダムフォレスト構築アルゴリズムの改良により、従来比2倍から10倍高速化し、桁違いに小さいフォレストを生成できるようになりました。

ありがとうございます。

 
エリブラリウス

ありがとうございました。

もし解って比較するなら、教えてください :) 面倒でなければ、そのように書き換えてもいいのではないでしょうか。今の森のファイルは大きすぎるので、減らせたらいいと思う。そして、加速度もおまけ程度に。

 

マキシムのおかげでBANされなくなったよ。マキシムさんありがとうございます。

久々にサウナに入って、正月前に書いた葉っぱのEAを動かしてみました。 今のところ結果はマイナスですが、EAを始めた時には起きなかった年越しの強い動きでSiが今横ばい状態なので、もう少し時間を置いた方がいいのかなと思います。

テストは、長い歴史と悪い経験を持つアカウントで最小限のボリュームで行われたので、公共の信号はありません、私は後で統計が利用可能になるときにレポートを投稿します。私のやり方が儲かるかどうか、興味のある人のためにやっているのです。

CatBoost'aについては、私は非常に小さなモデルを持っているので、1〜30木程度、その後、テスト(選択モデル上)と試験(独立したテスト)のサンプルは非常に良い財務結果を示すことができる状況に直面して、しかし訓練サンプルの結果は非常に弱いです。そこで、今は3つのサンプルすべてでモデルをテストし、納得がいけばそれを選択するようにしています。私は木の葉(葉だけを選択する私の代替アプローチ)やscaffoldingと同じ効果、つまりテストサンプルでモデルが確実に良い振る舞いをすることを期待していたのでこれを行いませんでしたが、これは必ずしもそうではないことがわかりました。

これまでのところ、モデルを選択するための基準の問題は、100kのうち良いモデル(財務指標と 基準モデルの数)の訓練のためのサンプルのテストの後、私にはオープンですもちろん十分ではありません10〜30個、より多くのではありません。基準を下げるか、機種を増やすか、どちらかにすべきです。Catbustはパラメータが豊富なので、多くのモデルをリベットで固定することができます。

一方、グラフィックカードによる学習にはとても期待していたのですが、1060ではほとんど使えないことが判明しました。これまでの実験では、200モデルの学習に20分かかったのに対し、CPU G3900(実はLGA1151以下のスラグ)ではわずか6分しかかかりませんでした同時に、プロセッサーは常に50%から60%の負荷がかかっており、6カードリグに期待していたのに、2枚以上のビデオカードを同時に使用することは不可能です。理論上はすべてが高速になるはずなのに、なぜこうなるのかわからない。GPU計算の最大のボトルネックは、RAMからGPUへのモデルの転送とその逆ですが、私には遅すぎます、もしかしたら、転送は反復のたびに行われ、それがラグの原因なのかもしれませんね。GPUで動かしてみた方はいらっしゃいますか?

 
マキシム・ドミトリエフスキー

もし解って比較するなら、教えてください :) 面倒でなければ、そのように書き換えてもいいのではないでしょうか。今の森のファイルは大きすぎるので、減らせたらいいと思う。そうですね、加速度もおまけでついてきますし。

比較したところ、下に同じ未使用のコードがあります。(2009年署名、つまりこの部分は編集されていない)。


             Copyright 16.02.2009 by Bochkanov Sergey
        *************************************************************************/
        public static double dfavgce(decisionforest df,
            double[,] xy,
            int npoints,
            alglib.xparams _params)
        {
            double result = 0;
            double[] x = new double[0];
            double[] y = new double[0];
            int i = 0;
            int j = 0;
            int k = 0;
            int tmpi = 0;
            int i_ = 0;

            x = new double[df.nvars-1+1];
            y = new double[df.nclasses-1+1];
            result = 0;
            for(i=0; i<=npoints-1; i++)
            {
                for(i_=0; i_<=df.nvars-1;i_++)
                {
                    x[i_] = xy[i,i_];
                }
                dfprocess(df, x, ref y, _params);
                if( df.nclasses>1 )
                {
                   
                    //
                    // classification-specific code
                    //
                    k = (int)Math.Round(xy[i,df.nvars]);
                    tmpi = 0;
                    for(j=1; j<=df.nclasses-1; j++)
                    {
                        if( (double)(y[j])>(double)(y[tmpi]) )
                        {
                            tmpi = j;
                        }
                    }

                    if( (double)(y[k])!=(double)(0) )
                    {
                        result = result-Math.Log(y[k]);
                    }
                    else
                    {
                        result = result-Math.Log(math.minrealnumber);
                    }
                }
            }
            result = result/npoints;
            return result;
        }

理由: