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

 
ロールシャッハ

フォレストについては、重要度とクラスターを見るオプションがあります。catbustではplot_treeでしょうか。

データを作成して掲載します。

6カラムのテスト版を作りましたが、11GBかかりました。Notepad++はファイルが大きすぎると言って開くことができませんでした。BD Browser for SQLiteが20分ほどハングアップしています。

木の房がどのようなものか写真で見せてください、まだ意味がわかりません。

なぜ開けるのか?:)デバッグ用に似た構造のミニコピーを作っているだけです。

 
elibrarius:

すべてのデータをメモリに取り込まずに、どうやって木を学習させているのだろう。テーブルが6ギガバイトなら、約6ギガバイトのメモリーを使用する必要があります。ツリーでは、各列を全体としてソートする必要があります。すべてをメモリに入れず、毎回ディスクからデータを読み込むとなると、あまりに遅くなってしまいます。
唯一のバリエーションは、メモリ上のデータをdouble型ではなくfloat型で保持することですが、これは精度を下げることになります。5桁の精度の我々にとっては、それほど問題ではないかもしれませんが、catbustは世界共通のソフトウェアですから、物理的、数学的な問題は倍精度で解くべきと思います。

コードを勉強したわけではありませんが、論理的に考えると、CatBoostはおそらくサンプルデータのテーブルを変換して、まさに変換されたバリアントを格納するので、高速圧縮に向いているのでしょう。

変換は各予測器の量子化グリッド上で行われ(6つのアルゴリズムが利用可能)、例えば、変数の1000の異なる値から32のバリエーション(量子化グリッドの範囲に入る)が残り、このようなデータベクトルは簡単に圧縮され、さらに数字はすでに整数だけ(グリッドのサイズの制限 -型データ ushort - 番号に2バイトを判断)、量子化テーブルは単にメモリ内にあり、コード内のモデル作成時にすでに使用されています。今,我々はすでにサイズを小さくしたが,さらに,評価のためにすべての予測変数ではなく,その一部を選択することによって,量を減らすことが可能である.これは,大きなサンプルで行うことが推奨され,そうすれば,ランダマイザのアルゴリズムは,一度に「バッグ」に入らなかった予測変数を他の木で使うことができる.確かに他のトリックもありますが、メインは量子化です。

量子化は別に考えるべきで、理想的には各予測器はそれ自身のグリッドと一致させるべきで、データはグリッドと一緒にトレーニングのために提出されるべきで、それはアルゴリズムにそうさせるのです。

そのため、サンプルは自己量子化することができ、うまく圧縮されることになる。

 
Aleksey Vyazmikin:

私はコードを研究していませんが、論理的に考えると、CatBoostはおそらくサンプルデータのテーブルを変換し、高速圧縮に従順な変換後の変種を正確に保存しているのでしょう。

変換は各予測器の量子化グリッド上で行われ(6つのアルゴリズムが利用可能)、例えば、変数の1000の異なる値から32のバリエーション(量子化グリッドの範囲に入る)が残り、このようなデータベクトルは簡単に圧縮され、さらに数字はすでに整数だけ(グリッドのサイズの制限 -型データ ushort - 番号に2バイトを判断)、量子化テーブルは単にメモリ内にあり、コード内のモデル作成時にすでに使用されています。今,我々はすでにサイズを小さくしたが,さらに,評価のためにすべての予測変数ではなく,その一部を選択することによって,量を減らすことが可能である.これは,大きなサンプルで行うことが推奨され,そうすれば,ランダマイザのアルゴリズムは,一度に「バッグ」に入らなかった予測変数を他の木で使うことができる.確かに他のトリックもありますが、メインは量子化です。

量子化は別に考えるべきで、理想的には各予測器はそれ自身のグリッドと一致させるべきで、データはグリッドと一緒にトレーニングのために提出されるべきで、それはアルゴリズムにそうさせるのです。

そのため、サンプルを単体で量子化してもうまく圧縮されるのです。

そうですね、たしかデフォルトで1024の分割バリアントのグリッドがありますね。すべてのデータを分割番号に置き換えると、8バイトから2バイトになるushort形式で格納でき、4倍の圧縮が可能です。だから6gbではなく2gbにしたのでしょう。
このグリッドが何に使われているのか理解できましたが、圧縮用であることがわかりました。そして、仕分けも早くなりました。
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
 
elibrarius:
そういえば、デフォルトで1024個の分割バリアントのグリッドがあるようですね。すべてのデータを分割番号に置き換えると、8バイトから2バイトになるushort形式で格納でき、4倍の圧縮が可能です。そのために6gbではなく2gbにして使っていたのでしょう。

デフォルトは254ですが、その時どれくらいに設定したかは覚えていません。おそらく2gb弱のメモリを消費していたと思いますが、あまりの少なさにとても驚いたのを覚えています。

いずれにせよ、この手法ではサンプリングそのものも大幅にデータを圧縮することが可能です。ニューラルネットワークではできないこと

elibrarius:
今、このグリッドが何に使われているのかがわかったのですが、圧縮に使われていることがわかりました。そして、仕分けが早くなりました。
また、グリッドは数値の幅を 利用するため、フィッティングが少なくても大丈夫です。しかし、これが常に良いとは限らない。理論的なレベルを捉えるには、自分でグリッドを切らなければならないと思う。
 
Aleksey Vyazmikin:

デフォルトは254ですが、その時どれくらいに設定したかは覚えていません。おそらく消費したメモリは2gb以下。あまりの少なさにとても驚いたのを覚えています。

それならucharを使えばいい、1バイトなんだから。

Aleksey Vyazmikin:
Gridは、値の 範囲を使用するため、より少ない量でフィットさせることができます。しかし、理論的なレベルを捕らえるには、自分でグリッドを切らなければならないので、必ずしも良いとは言えません。


ushortの最大値は65000です。このようなグリッドを設定する場合、手動で気にする必要はないかもしれません。

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

https://www.mql5.com/ru/articles/8385

良い実装であることは事実ではありません )

ロシアのはパス。

それは読みました))) 計算間違いだらけで、ネットワークはかなりランダムな答えを出しています

 
elibrarius:

それならucharを使えばいい、1バイトだ。


ushortでは、最大値は65kです。このようなグリッドを設定した場合、手動で心配する必要はありません。

その最大サイズは65535ですが、コード内の変数に影響を 与えることができません。

最大サイズについては、データストリップに合わせたり、近いものを飛ばしたりすることができるため、結果を保証するものではありません。

一般に、クロージング・スプリット(A>10 && A<=15)の妥当性を常にチェックする学習アルゴリズムがあれば良いのですが、通常はランダムに発生します。

 
Alexander Alexeyevich:

私はこれを読みました)) 計算間違いが多く、ネットワークはかなりランダムな答えを出します。

ネットワークは自分で書きますか?

ここでのVodは、最小限の単語と最大限のコードをpythonで、かつ英語で書いています。

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Building a Recurrent Neural Network - Step by Step - v1
  • datascience-enthusiast.com
Building your Recurrent Neural Network - Step by Step
 
マキシム・ドミトリエフスキー

ネットワークは自分で書きますか?

Pythonだけでなく、英語でも最小限の単語と最大のコードがあります。

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

そうです、自分でやりたいんです)なぜなら、すべての記事や例題は活性化関数を正しくカウントしておらず、例えばシグモイド関数は常に1/1+exp(-x)と仮定されています。1.0/1.0+exp(-x)が必要です。同じように見えるが、ターミナルでは異なる計算をする) 同じ計算をしているかどうか確認する) そのため、エラーが発生する。
 
Alexander Alexeyevich:
はい、自分でやってみたいです) なぜなら、すべての記事において、活性化関数の例が正しくカウントされていないからです) 例えば、シグモイドはどこでも1/1+exp(-x)とカウントされます。1.0/1.0+exp(-x)が必要です。同じように見えるが、ターミナルでは異なる計算をする) 同じ計算をしているかどうか確認する) そのためエラーが発生する。
端末でニューラルネットワークを書くというのは、全く選択肢にない。そこでどんな機能を使ってもいいのですが、突然期待通りに動かなくなることがあります。テスト済みのものを使用する
理由: