[機械学習・進化計算による株式取引最適化] No.06-03 収益グラフの表示

このプログラムの目的

このプログラムはdqn.pyなどの学習によって得られたエージェントの収益グラフ,もしくはその学習過程をグラフとして出力するものです.

work_share
├06_sampling_dqn_learning
  ├Dockerfile
  ├docker-compose.yml
  └src
    ├draw_graph
    | └draw_tools.py (これを作成)
    ├enviroment
    | └stock_env.py
    ├reinforcement_learning
    | └dqn.py
    └experiment01.py

保存したデータのグラフ化

分けて話すようなことでもないので,一括で載せます.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

def plot_log(log, save_path, key):
    x = log['i']
    y = log[key]

    y_finite = y.values[[np.isfinite(y)]]
    if len(y_finite) != 0:
        plot_max = np.percentile(y_finite, 95) * 2
        plot_min = np.percentile(y_finite, 5) * 0.5

    plt.cla()
    plt.clf()
    plt.plot(x, y)
    if len(y_finite) != 0:
        plt.ylim([plot_min, plot_max])
    plt.title(key)
    plt.savefig(save_path, bbox_inches='tight')

def plot_win_rate_df(win_rate_df, save_path, title):
    is_train_data = win_rate_df['is_train_data']
    win_rate_df = win_rate_df.drop('is_train_data', axis=1)
    sum_win_rate = win_rate_df.sum(axis=1)
    x = sum_win_rate.index.values
    y = sum_win_rate.values

    train_num = np.sum(is_train_data)
    split_date = x[train_num]
    plt.cla()
    plt.clf()
    plt.plot(x, y)
    plt.vlines(split_date, np.min(y), np.max(y), label='train test split', linestyles='dashed', colors='gray')
    plt.legend()
    plt.title(title)
    plt.savefig(save_path, bbox_inches='tight')
タイトルとURLをコピーしました