Dataloader のリファクタリングと keras エントリの経験

117回目のオリジナル記事は「個人の成長と富の自由、世界の運用の論理、AIの定量的投資」に焦点を当てています。

北京での流行状況は昨日 4,000 人を超え、社会の人口は 800 人を超えました。3日間の期待は楽観的すぎるようで、どう展開していいのかわからない。資本市場の短期的なトレンドと同様に、誰も予測することはできません。しかし、3 年先を見据えると、今は大きなことのように思えることはすべて、もはや問題ではなくなると信じています。

AI 定量化プラットフォームの最適化を続けます。

01 データローダとキャッシュ

dataloader は、データの特徴エンジニアリングとデータの自動ラベル付けを行います。要素数が多いと計算量が多く、起動するたびに1回計算するため効率が悪い hdf5のデータフレーム格納機能を利用して、計算要素とラベリング結果を格納し、ロードすることができます次回はキャッシュから直接。

データローダーは、データベース、csv ファイルまたは hdf5 ストレージ形式からデータを読み取り、通常は各シンボルに対応する時系列データを読み取り、pandas データフレームの形式でメモリにロードします。次に、式マネージャーを使用して特徴を計算し、対応するデータフレームに保存します。

# encoding:utf8 
loguru から
pd として pandas をインポート
engine.datafeed.expr.expr_mgr からlogger をインポート
engine.datafeed.datafeed_hdf5 から ExprMgr をインポート engine.config から Hdf5DataFeed を
インポート DATA_DIR_HDF5_CACHE
クラスをインポート Dataloader: 
    def __init__(self, symbols, names, fields, 
        load_from_cache 
        = 
        False ) 
        : 
        _ 
        _ 
            _ 'features' 
            if load_from_cache and '/' + key in store.keys(): # 注意判断keys 必要前に「/」を追加





                logger.info('Load from cache...') 
                self.data = store[key] 
            else: 
                self.data = self.load_one_df() 
                store[key] = self.data 

    def load_one_df(self): 
        dfs = self . load_dfs() 
        all = pd.concat(dfs) 
        all.sort_index(ascending=True, inplace=True) 
        all.dropna(inplace=True) 
        self.data = all 
        return all 

    def load_dfs(self): 
        dfs = [] 
        for code in self.symbols: 
            # 簡単に再利用できるようにフィールドをメモリに直接追加します
            df = self.feed.get_df(code)  
            for name, field in zip(self.names, self.fields):
                exp = self.expr.get_expression(field)
                # ここで複数のシーケンスが返される場合があります
                se = exp.load(code) 
                if type(se) is pd.Series: 
                    df[name] = se 
                if type(se) is tuple: 
                    for i in range(len(se)): 
                        df[name + '_' + se[i].name] = se[i] 
            df['code'] = コード
            dfs.append(df) 

        return dfs

dataloader は、シンボル、名前、フィールド、および load_from_cache の 4 つのパラメーターを受け入れます。

シンボル: ロードされる証券のリスト。

名前: 機能名。

fields: 因子式のリスト。

load_from_cache: キャッシュからロードするかどうか。

Load_dfs、シンボルごとにトラバースします。各シンボルの元のデータフレームがメモリに読み込まれた後、名前とフィールドに対して計算する必要がある特徴列の係数値を計算し、データフレームに保存します。

Load_one_df は、load_dfs によって返された複数のデータフレームを 1 つのデータフレームにマージして返し、後で使用できるようにキャッシュに保存します。

02 ブースト GBDT へのランダム フォレストのアップグレード

from sklearn.ensemble import RandomForestRegressor,AdaBoostRegressor,HistGradientBoostingRegressor 

e.add_model(SklearnModel(AdaBoostRegressor()), split_date='2020-01-01', feature_names=feature_names)

GBDT のいくつかの主要なアルゴリズムには、同様の sklearn インターフェイスがあります。

03 Keras 深層学習フレームワーク

ディープラーニングは、最先端の人工知能技術の 1 つです。ただし、sklearn フレームワークなどの従来の機械学習と比較すると、ディープ ラーニングの学習しきい値ははるかに高くなります。深層学習では、ネットワーク構造の構築、学習率の設定、最適化目的関数の選択などをユーザーが行う必要があります。機能は柔軟で強力で、学習曲線も高い.

最も人気のある 2 つの深層学習フレームワークは、factbook の pytorch と google の tensorflow です。2 つのフレームワークを純粋に比較すると、pytorch の学習曲線は tensorflow よりもはるかに低くなりますが、それでも初心者には行列演算や微積分などの数学的知識が必要です。

Keras の出現により、tensorflow を使用するための敷居が大幅に下がりました。

Keras は、Python で記述された高レベルのニューラル ネットワーク API であり、TensorFlow、CNTK、または Theano をバックエンドとして実行できます。Keras は、迅速な実験を可能にすることに重点を置いて開発されました。アイデアを最小限のコストで実験結果に変換できることは、優れた研究を行うための鍵です。

公式の使用シナリオ:

· 簡単かつ迅速なプロトタイピングを可能にします (使いやすさ、高いモジュール性、スケーラビリティによる)。

· 畳み込みニューラル ネットワークと再帰型ニューラル ネットワークの両方、および 2 つの組み合わせをサポートします。

· CPU と GPU の両方でシームレスに実行されます。

Keras の最大の利点は、初心者にとって非常に重要な、シンプルで迅速なプロトタイピングです。私たちの目標は、ディープラーニング自体の詳細を調べるのではなく、投資を定量化し、ディープラーニングを定量化に適用することです. したがって、最小のコストで要求を満たすことが重要です. その後の深層強化学習の選択のフレームワークも、この原則に従います。

Keras 組み込みデータセット:

データ変換: N 28*28 データを N*784 2 次元データに変換:

ラベルは one hot の形式に変換されます。

実際のモデリング コードは短いです。

10 エポック、正解率は 92% です。

最近の記事:

ETF ローテーション + RSRS タイミング、およびカマン フィルター: 年率 48.41%、シャープ レシオ 1.89

おすすめ

転載: blog.csdn.net/weixin_38175458/article/details/128063239
おすすめ