記事についてのディスカッション - ページ 14

削除済み  
mytarmailS:

カロッホ......よくわからないんだ。)でも、それがあるのとないのとでは違いがないと思うんだ。僕の考えでは、すべてはターゲットで決まるのであって、それ以外の何ものでもないんだけど......。


全部で60kのデータがあるんだ。

最初の1万点からランダムに500点を選ぶ。

すぐにモデルを訓練するか、gmmを訓練してからモデルを訓練します。

残りの5万点をテストする。

そして、通常の方法でも、 gmmと 同じようにこのようなモデルを見つけることができ、同じ頻度で遺伝している

例えば

gmm なしの モデルは500点で学習され、50k点でテストされる。


=================================================================================================

考えさせられる面白いものを見た......。

市場が状態に分割され、各状態で異なる戦略を取引する必要があるという見解のようなポイントがありますが、私に知られているすべての試みは失敗しました、どちらかの状態が表示されないか、またはモデルが "一種の "状態であってもひどく取引。

しかし、この方法では、モデルがどの市場を「好き」なのかがはっきりわかる。どの市場が好きで、どの市場が嫌いなのか。

おそらく、マシュカからのリターンがサインとなるため、モデルは平坦な状態の方がうまく機能するのだろう。

手動で状態に分割し、これらの期間をトラックに追加することが可能です。状態」によって例をバランスさせるか、gmmで人工的なものを作る必要がある。ベアモデルでそのような結果を得たことはない。多分、数人のマシャならそれができるだろう。
 
Maxim Dmitrievsky:
手動で状態を分割し、その期間をトレーンに入れることができる。状態」によって例をバランスさせるか、gmmで人工的なものを作る必要がある。

はい、状態別にHMMを行うことはできますが、それはすべてスライディングウィンドウで認識されるので、ウィンドウサイズにラグが生じます。)

私はちょうど状態の本当の明確なビューがあることを見た、それは興味深いように見えた。

削除済み  
mytarmailS:

たしかに、状態によってHMMを行うことはできるが、それはすべてスライディング・ウィンドウによって認識されるため、ウィンドウ・サイズにラグが生じる。)

今見たのですが、ここでは本当にはっきりと状態を見ることができますね。

トレンドは通常フラットではないので、常にこのような状態になると思われます。同じようにクラスタリングして状態に分けることができる。
 
Maxim Dmitrievsky:
.どうして、裸のモデルであのような結果が出たことがないんだ。マシュカならできるかもしれない。

gmmと一緒で、あれやこれやといろいろ試しているんだ。

 
Maxim Dmitrievsky:

私は、分布や関数を最適化してトレーニングサンプルを作成することに執着している。

サンプルをまったく使わずに、ただ「何か」を生成し、それを実際のデータでテストする。

しかし、それを実現する方法がまだわかりません。

=====================================================

また、モデルから悪い木を取り除くことで品質を向上させるアイデアもあります。

削除済み  
mytarmailS:

私は、分布や関数を最適化してトレーニングサンプルを作成することに執着している。

そして、サンプルからまったく出発することなく、ただ「何か」を生成し、それを実際のデータでテストする。

しかし、それを実現する方法を私はまだ知らない。

=====================================================

また、モデルから悪い木を取り除くことで品質を向上させるというアイデアもあるのですが、それも役に立つかもしれません。

確率論的モデリングにどっぷりつかりたいあなたへ
 
Maxim Dmitrievsky:

不思議なアプローチだ。クラスのバランスを取るためだ。私たちの目的には合っているかもしれない。ふと思いついたんだ。

https://towardsdatascience.com/augmenting-categorical-datasets-with-synthetic-data-for-machine-learning-a25095d6d7c8

私はこのアプローチをこの記事のクラスタライザーに統合しようとしましたが、クラスバランシングメソッドとしてではなく、新しいバランスのとれたデータセットのジェネレータとしてでした。

そこには、2つの1次元配列間のマハラノビス距離を計算する 素晴らしい方法がある。その記事によると、これは分布の平均から標本が何標準偏差離れているかの多変量一般化だ そうです。

このメトリックをまだ十分に経験していないが、著者は生成された特徴が特定のクラスに属するかどうかを評価するために使用することを提案して いる。

https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.mahalanobis.html

この指標を計算するには、2つの単変量配列と共分散行列が必要です。

我々の場合、1番目の配列は生成された特徴量、2番目の配列はGMMからの特徴量の平均分布です。共分散行列もGMMから取られます。GMMは各クラスごとに用意される。また、各特徴の平均、標準偏差、ラベルも生成される。これらは新しいデータを生成するために必要です。

import numpy.linalg as lnalg
from scipy.spatial.distance import mahalanobis

#initialization 
gmms = dict()
desc_df = list()
inv_sig = dict()
arr_classes = np.sort(X.labels.unique())
cols = X.columns.tolist()
pr_c = add_labels(pr.copy(), min=60, max=120, add_noize=0.0)
X = pr_c[pr_c.columns[2:]]
x_train = X.copy()

#create descriptive statistics, train gmm, extract means and covariances for each classes
for ind, cls in enumerate(arr_classes):

    desc_df.append(x_train[x_train['labels'] == cls].describe())

    x_trainGMM = x_train[x_train['labels'] == cls].values[:, :-1]
    gmm = mixture.GaussianMixture(n_components=1, covariance_type='full').fit(x_trainGMM)
    gmms[cls] = (gmm.means_, gmm.covariances_)

    # invert the matrix for mahalanobis calc
    mu, sig = gmms[cls]
    isig = lnalg.inv(sig)
    inv_sig[cls] = mu, isig

これで新しいデータの生成と選択の準備はすべて整った。以下、平均と偏差をもとにランダムに、各クラスの特徴量を指定の60倍以上の数で生成する。これは選択するために必要である。そして、ラベルは0 -1の状態になる。

 def brute_force(samples=5000):
    import numpy.linalg as lnalg
    gen = []

    for index_cl, cls in enumerate(arr_classes):

        dlt = samples * 60
        sub_arr = np.zeros((dlt, len(cols), 1))
        
        #generate samples ahd lables for cls class
        col_counter = 0
        for col in cols:
            sub_arr[:, col_counter] = np.random.normal(loc=desc_df[index_cl][col]['mean'],
                                                       scale=desc_df[index_cl][col]['std'],
                                                       size=(dlt, 1)
                                                       )
            col_counter += 1
        sub_arr = sub_arr.reshape((sub_arr.shape[:-1]))

        #normalization lables
        sub_arr[-1] = np.where(sub_arr[-1] >= 0.5, 1, 0)

        mh = np.zeros((arr_classes.shape[0]))
        counter = 0

        #selection of the most successful samples
        for index, i in enumerate(sub_arr):
            for m_index, m_cls in enumerate(arr_classes):
                mu, isig = inv_sig[m_cls]
                mh[m_index] = mahalanobis(i[:-1], mu, isig)
            
            #if gmm assignment the same as the original label add in gen
            if np.argmin(mh) == i[-1]:
                gen = np.append(gen, i)
                counter += 1
            if counter == int(samples / 2):
                break


...

各サンプルについて、両クラスのGMMの平均分布の配列に対するマハラノビス距離 指数が計算された後、生成されたサンプルが両クラスに近いことを示す2つの値の配列が得られる。もしラベルがこれと一致すれば、それを学習サンプルに加える。このようにして、完全にバランスの取れたサンプルが得られます。

しかし、タンバリンダンスやランダム性との複雑な関係を打ち消すことはできない。しかし、頑張れば正常な結果を得ることができる:

もし時間とエネルギーがあれば、25から75分位までの特徴量の分布をジェネレーターに蒔いてみようと思う。

また、距離インジケータを使って対象特徴の選択を評価することも試みました。このアイデアは、正しく選択されたラベルとターゲットがあれば、このインジケータの平均値は減少するというものです。

results = np.zeros(x_train.shape[0])
mh = np.zeros((arr_classes.shape[0]))
for index, i in enumerate(x_train.to_numpy()):
    for m_ind, m_cls in enumerate(arr_classes):
        mu, isig = inv_sig[m_ind]
        mh[m_ind] = mahalanobis(i[:-1], mu, isig)

    if np.argmin(mh) == i[-1]:
        results[index] = mh[np.argmin(mh)]

acc = results.sum() / results.shape[0]

print('Accuracy:', acc)

ターゲットと特徴の「成功した」組み合わせをすべて実行し、「失敗した」組み合わせも再現した。このようなざっとした分析では、インジケータは成功したバリアントでは減少し、失敗したバリアントでは増加した。何らかの相関関係があるかもしれないが、確認する必要がある。グリッドスキャナーのリリースやGAがあれば、それをチェックすることができる。

削除済み  
welimorn:

このアプローチをクラスタリング・エンジンに組み込もうとしたのだが、クラス・バランシングの方法としてではなく、新しいバランスのとれたデータセットの生成としてだけだった。

ターゲットと属性の "成功した "組み合わせをすべて実行し、"失敗した "組み合わせを再現した。このざっとした分析では、成功したバリアントではインデックスが減少し、失敗したバリアントではインデックスが増加しています。何らかの相関があるかもしれないが、確認する必要がある。グリッドスキャナーのリリースかGAがあれば、それをチェックすることができる。

まだスキャナーはない。素晴らしい。コーダー以外の)モデルを改善する追加的なアプローチについて、これまで情報を集めてきた。近いうちに正式に記事にするつもりだ。

 
Maxim Dmitrievsky:

スキャナーはまだない。いいね、よく見てみないと。その間に、(コーダー以外の)モデルを改善できる追加のアプローチについて情報を集めている。近いうちに正式に記事にするつもりだ。

前述の、成功したモデルを組み合わせて検索する方法ですが、私は成功したモデルを異なる属性で組み合わせてみました。このテクニックは、履歴の一部でドローダウンを均等にします。また、R^ 2が 0.85~0.95のモデルがあったとしても、R^2が 0.65のモデルを追加することで結果が改善されることに気づきました。

削除済み  
welimorn:

サーチの過程で成功したパターンを組み合わせるという上述の手法に加えて、成功したパターンを異なる属性で組み合わせてみた。この手法により、履歴の一部のドローダウンが均等になる。また、R^ 2が 0.85~0.95のモデルがあったとしても、R^2が 0.65~のモデルを追加することで結果が改善されることに気づいた。

そうですが、多くの場合、取引回数を10~20%減らすという犠牲を払うことになります。