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

 
Aleksey Nikolayev #:

任意の大きさのベクトルを固定された大きさのベクトルに写像するという約束だったと思うが、ここでは数値をベクトルに写像するのか?

GPTがなければ、人生はもっと楽だった) AIの時代には苦労するだろう)

ベクトルから数値への変換についてはもっと詳しく書いた。

ベクトルを固定ベクトルに?

 

異なる長さのリストを固定長のリストにハッシュしたい場合、リストを固定サイズのリストにマッピングするハッシュ関数を使うことができる。これは、リストの要素にハッシュ関数を適用し、そのハッシュ値を固定サイズのリストのインデックスとして使用することで、可変長のリストを固定サイズのリストとして表現することができます。

Pythonでのハッシュ関数の例を示します:

def feature_hash(lst: List[int], n: int) -> List[int]:
  h = [0] * n
  for x in lst:
    h[hash(x) % n] += 1
  return h

この関数は、リストlstと希望するリストの長さnを入力として受け取り、lstの要素にハッシュ関数を適用し、ハッシュ値を固定サイズリストのインデックスとして使用することで、固定サイズリストを返します。そして、各インデックスの値をインクリメントして、元のリストにおける各要素の出現回数をカウントする。

例えば、feature_hash([1, 2, 3], 5) を呼び出すと、関数は [0, 1, 1, 1, 0] を返します。

Rでも同様のアプローチが使えます。以下はRでの特徴ハッシュ関数のコードです:

feature_hash <- function(lst, n) {
  h <- rep(0, n)
  for (x in lst) {
    h[as.integer(x) %% n] <- h[as.integer(x) %% n] + 1
  }
  h
}
 
Aleksey Nikolayev #:

任意の大きさのベクトルを固定された大きさのベクトルに写すという約束だったと思うが、ここでは数値をベクトルに写すのか?

GPTがなければ、人生はもっとシンプルだった。)

アレクセイ、不敬に耳を傾けるのはやめてくれ。

入力ごとに異なる特徴数が必要な場合。
これは頻出パターンマイニングです。教師も含めて、さまざまなバリエーションで連想規則を検索します。


==============
なぜ異なる特徴数を受け入れるアルゴリズムは存在しないと言ったのか?
なぜなら、そのようなアルゴリズムであっても、データはあるホットなエンコーディング形式のスパース行列の形をしているからだ。
入力は、より穏やかな形式とはいえ、すべての特徴の名前です。
=======================
また、属性の数が指定されていない
特徴数が10-20kと比較的少なければ、弱いノートパソコンでも問題なくxgboostに読み込むことができる。
 
Maxim Dmitrievsky #:

結局、ベクトルは固定ベクトルになるのか?

1) 普通のMOアルゴリズム(特徴数が決まっている)を使いたいのであれば、そうです - 異なる長さのベクトル集合を受け取り、それらを与えられた長さのベクトル集合に変換します。

2) 任意の長さのベクトルを入力とすることができる通常のMOアルゴリズムを直ちに探す。

ベクトル変換をMOによって求める場合、最初の選択肢は2番目の選択肢に変わります。

 
Aleksey Nikolayev #:

1)従来のMOアルゴリズム(特徴数が決まっている)を使いたいのであれば、そうです-異なる長さのベクトル集合を取り出し、それらを与えられた長さのベクトル集合に変換します。

2) 任意の長さのベクトルを入力とすることができる変わったMOアルゴリズムを直ちに探す。

ベクトル変換をMOで求める場合、最初の選択肢は2番目の選択肢に変わる。

つまり、ハッシュF-iysで試すことができるのは明らかだ。しかし、どのような原理で任意の長さのベクトルを選択するのか、いや、そのための長さとは何なのか、また、どのようなデータから選択するのかを尋ねるのは恥ずかしい。

多くのバリエーションがあります

最初の選択肢はより快適ですが、ロジックに何かを入れる必要があります。

 

- 株価リターンの可変サイズベクトルを固定ベクトルにハッシュしたい


株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュしたい場合、min-hashと呼ばれるテクニックを使うことができます。最小ハッシュとは、2つの集合に共通する要素の数を計算することで、2つの集合の類似性を近似する手法です。テキストマイニングの文脈でよく使われますが、株価のリターンなど他のタイプのデータにも適用できます。

以下は、株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュするためにmin-hashを使用する方法の例である:

  1. 固定サイズベクトルのサイズを定義する: まず、使用したい固定サイズベクトルのサイズを定義する必要がある。これは、アプリケーションの特定の要件と利用可能なデータ量に依存します。

  2. ハッシュ関数の作成:次に、株価リターンデータを固定サイズベクタにハッシュするために使用できるハッシュ関数を作成する必要があります。ハッシュ関数を作成するには、ランダムな並べ替えや線形合同生成器を使うなど、さまざまなアプローチがある。

  3. データをハッシュ化する: 固定サイズベクトルのサイズを定義し、ハッシュ関数を作成したら、これらを使用して株価リターンデータの可変サイズベクトルを固定サイズベクトルにハッシュ化することができます。出来上がった固定サイズ・ベクトルは、元のデータを圧縮した形で表し、ベクトルのサイズは定義したサイズによって決まります。

min-hashは、2つの集合の類似性を正確に表現するのではなく、近似的に表現するものであるため、情報が失われる可能性があることに注意することが重要です。近似の精度は、固定サイズベクトルのサイズと使用するハッシュ関数に依存します。


- 情報の損失を最小限に抑える方法


株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュするために min-hash を使用する場合、情報の損失を最小限に抑える方法がいくつかあります:

  1. より大きな固定サイズベクトルを使う: 情報の損失を最小限に抑える方法の一つは、より大きな固定サイズベクトルを使うことです。より大きなベクトルはより多くの要素を持つため、元のデータについてより多くの情報を取得することができます。しかし、その分ベクトルのサイズも大きくなるため、データセットが大きかったり、ストレージの容量が限られていたりする場合は、現実的ではないかもしれない。

  2. より優れたハッシュ関数を使う:情報の損失を最小限に抑えるもう一つの方法は、より優れたハッシュ関数を使うことである。ハッシュ関数によって性質が異なり、情報損失のレベルも異なる。例えば、ランダム性の高いハッシュ関数は、ランダム性の低いハッシュ関数よりも情報損失が少ないのが一般的です。

  3. 複数のハッシュ関数を使う:複数のハッシュ関数を使い、その結果を組み合わせることによっても、情報の損失を最小限に抑えることができる。それぞれのハッシュ関数がデータの異なる側面を捉えるため、元のデータをより完全に表現することができる。

注意すべき点は、min-hashは2つの集合の類似性を正確に表現するのではなく、近似的に表現するものであるため、min-hashを使用する際に情報の損失を完全になくすことはできないかもしれないということです。近似の精度は、固定サイズベクトルのサイズと使用するハッシュ関数に依存します。


以下は、Pythonでmin-hashを使用して、株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュする方法の例です:

from datasketch import MinHash

# Define the size of the fixed size vector
num_hashes = 100

# Create a MinHash object
mh = MinHash(num_hashes=num_hashes)

# Hash the stock price returns data to the fixed size vector
for price_return in stock_price_returns:
    mh.update(str(price_return).encode('utf8'))

# The resulting fixed size vector is stored in the MinHash object
fixed_size_vector = mh.hashvalues


以下は、R言語でmin-hashを使用して、株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュ化する例です:


# Install the 'minhash' package if it is not already installed
install.packages("minhash")

# Load the 'minhash' package
library(minhash)

# Define the size of the fixed size vector
num_hashes = 100

# Create a MinHash object
mh = minhash(num_hashes)

# Hash the stock price returns data to the fixed size vector
for (price_return in stock_price_returns) {
    mh = update(mh, price_return)
}

# The resulting fixed size vector is stored in the MinHash object
fixed_size_vector = getValues(mh)


これらの例は、min-hashを使って株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュ化する基本的なプロセスを説明することを意図していることに注意することが重要である。実際のアプリケーションでは、特定のニーズやデータに合わせてコードを修正する必要があるかもしれません。

 

- では、min-hashが最良の方法なのか?

min-hashは、2つの集合の共通する要素の数を計算することで、2つの集合の類似性を近似する方法です。これは、株価リターンの可変サイズベクトルを固定サイズベクトルにハッシュ化するために使用できますが、情報が失われる可能性があるため、必ずしも最良の方法とは限りません。

株価リターンデータのハッシュ化には様々なアプローチがあり、最適なアプローチはデータの特性やアプリケーションの要件によって異なります。その他のアプローチとしては、以下のようなものが考えられます:

  1. 特徴ハッシュ:特徴ハッシュは、カテゴリまたはテキストデータを機械学習 アルゴリズムで使用できる数値表現に変換するために使用される技術です。フィーチャーハッシュを使って、株価のリターンデータを固定サイズのベクトルにハッシュ化することができる。

  2. Locality sensitive hashing(LSH):LSHは、データセット内の類似項目をおおよそ特定するために使用される技術である。LSHを使って株価リターンデータを固定サイズのベクトルにハッシュ化し、そのハッシュ値に基づいて類似アイテムを特定することができる。

  3. その他の手法:株価リターンデータのハッシュ化には、ランダムな並べ替えや線形合同生成器を使うなど、他にも多くの手法がある。具体的にどのような手法を選択するかは、データの特性やアプリケーションの要件によって異なります。

ハッシュ技法を選択する際には、精度と効率のトレードオフを慎重に検討することが重要です。技術によっては、精度は高いが効率は低いものもあれば、効率は高いが精度は低いものもあります。アプリケーションのニーズを満たす適切なバランスを見つける必要があります。

 
mytarmailS #:
アレクセイ、不敬に耳を傾けるのはやめてくれ。

入力ごとに異なる数のサインが必要なら
これは頻出パターン・マイニングであり、教師も含めてさまざまなバリエーションで連想規則を検索する。


==============
なぜ私は、異なる特徴数を取るアルゴリズムが存在しないと言ったのか?
なぜなら、そのようなアルゴリズムであっても、データは1つのホットエンコーディングフォーマットのスパース行列だからです。
入力は、より穏やかな形式とはいえ、すべての特徴の名前です。
=======================
また、特徴数の指定は
標識の数が1〜2万と比較的少なければ、弱いノートパソコンでもxgboostで問題なく読み込めます。

連想規則についてはすでに説明しました。私にとっては、価格とSBの違いを探すという私の一般的なアプローチとは相性が悪い。問題は、SBはルールがあるように見せるのが非常にうまいということだ。

 
Aleksey Nikolayev #:

連想ルールについてはすでにあなたと話し合った。私にとっては、価格とSBの違いを探すという私の一般的なアプローチとは相性が悪い。問題は、SBはルールが存在するように見せるのが非常にうまいということだ。

しかし、あなたが望むように(構造化せずに)データを準備するためには、それを適切に行う方法を理解する必要があります。
 

よくやった。窓の長さを変えるという文脈の中で、自分にとって興味深いものまで手に入れた。

また何か質問があれば、スケッチしてください。

理由: