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

 

興味のある方のために、分類問題でクラスのバランスをとるためのスクリプトを紹介します。

バランシングは、ガウス混合モデルを用いたオリジナルサンプルの再サンプリングに基づいて行われます。ローカルなデータセットでは、クラスラベルがバランスしていることはほとんどないので、これを使うことをお勧めします。

時間と神経を大幅に節約できます。

import pandas as pd
from sklearn import mixture
import numpy as np

class GMM(object):
    def __init__(self, n_components):
        self.gmm = mixture.GaussianMixture(
                                            n_components=n_components,
                                            covariance_type='full', verbose=0,
                                            max_iter=1000,
                                            tol=1 e-4,
                                            init_params='kmeans')
        self.name_col = []
        # print("GMM_model -- create")


    def fit_data(self, data):
        self.name_col =  data.columns
        self.gmm.fit(data)
        # print("GMM_model -- fit comlite")

    def get_samples(self, n_samp):
        generated = self.gmm.sample(n_samp)
        gen = pd.DataFrame(generated[0])
        for c in range(len(self.name_col)):
            gen.rename(columns={gen.columns[c]: self.name_col[c]}, inplace=True)

        return gen

def get_balance_dataset(X,Y, gmm=30,num_samples= 200, frac=1):
        '''
        X -             features
        Y -             targets [0,1]
        gmm -           number of mixture components
        num_samples -   number of samples for each class
        num_samples -   percentage of a random number of samples from the original sampling


        '''
    name_targ = Y.columns
    X_out = pd.DataFrame()
    Y_out = pd.DataFrame()
    for index,name in enumerate(name_targ):
        prt_data = pd.concat([X, Y[name]], axis=1)
        if frac!=1:
            prt_data = prt_data[prt_data[name] == 1].drop(columns=[name]).sample(frac=frac)
        else:
            prt_data = prt_data[prt_data[name] == 1].drop(columns=[name])

        gmm_1 = GMM(n_components=gmm)
        gmm_1.fit_data(prt_data)
        sig_X = gmm_1.get_samples(num_samples)
        sig_Y = np.zeros((num_samples, len(name_targ)))
        sig_Y[:, index] = 1
        sig_Y = pd.DataFrame(sig_Y, columns=name_targ)
        X_out = pd.concat([X_out, sig_X], axis=0)
        Y_out = pd.concat([Y_out, sig_Y], axis=0)

    return X_out.to_numpy(), Y_out.to_numpy()
 
iwelimorn#:

興味のある方のために、分類問題でクラスのバランスをとるためのスクリプトを紹介します。

バランシングは、ガウス混合モデルを用いたオリジナルサンプルの再サンプリングに基づいて行われます。ローカルなデータセットでは、クラスラベルがバランスしていることはほとんどないので、これを使うことをお勧めします。

時間と神経を大幅に節約できます。

Pythonには、このための標準的なbibblesがないのですか?

 
mytarmailS#:

Pythonには、このための標準ライブラリはないのでしょうか?

あるにはあるのでしょうが、私は出会ったことがありません。

 
iwelimorn#:

興味のある方のために、分類問題で クラスのバランスをとるためのスクリプトを紹介します。

バランシングは、ガウス混合モデルを用いたオリジナルサンプルの再サンプリングに基づいて行われます。ローカルなデータセットでは、クラスラベルがバランスしていることはほとんどないので、これを使うことをお勧めします。

時間と神経を大幅に節約できます。

ニューラルネットワークで 分類問題を解く場合、そのことを明記する必要があると思うのです。
フォレストとブースティングはバランスをとる必要がない。

 
iwelimorn#:

こういう図書館もあるのだろうが、私は出会っていない。

なるほど...。ただ、R-kaにはMO用のものが大量にあるし、pythonはMO用の言語という位置づけで、2-3のアンロックライブラリ以外はないんです。

これでは理解できない((

 
elibrarius#:

ニューラルネットワークで 分類問題を解く場合、その点を明確にする必要があると思うのです。
フォレストとブースティングはバランスをとる必要がない。

おそらく。

 
mytarmailS#:

なるほど...。ただ、R-kaはMO向けのものが多く、pythonはMO向けの言語という位置づけで、2-3のアンロックバイナリしかないんですよね。

理解できない((

Rには詳しくなく、選択科目でMOを勉強しており、Daning-Kruegerで絶望の淵に立たされたところです。

 
mytarmailS#:

Pythonには、このための標準的なbibblesがないのですか?

そこにはバイブルが使われていて、ちょうどラッピングされている
 
iwelimorn#:

興味のある方のために、分類問題でクラスのバランスをとるためのスクリプトを紹介します。

バランシングは、ガウス混合モデルを用いたオリジナルサンプルの再サンプリングに基づいて行われます。ローカルなデータセットでは、クラスラベルがバランスしていることはほとんどないので、これを使うことをお勧めします。

時間と神経を大幅に節約できます。

ここには、バランス調整というより、標準化の効果があると思います。さらに、分布からサンプリングすることで、オーバートレーニングの防止にもつながります。
 
iwelimorn#:

絶望の渓谷への旅の始まり

)))すべてはうまくいく!
理由: