本章の目的
この章では強化学習を使った株価予測を実装してみます.また学習に使うデータセットは前章No.02で生成したlearning_dataset.dfpkl
となるので,前章を実行後にこの章を始めてください.
ディレクトリ・ファイル構造
本プロジェクト名は03_learning_dqn
とし,以下のような構成です.
また,Dockerfileおよびdocker-compose.ymlは前述の「Dockerコンテナの作成」の章に書かれているものと同じです.
work_share
├02_get_stock_price
└03_dqn_learning
├Dockerfile
├docker-compose.yml
└src
├draw_graph
| └draw_tools.py
├enviroment
| └stock_env.py
├reinforcement_learning
| └dqn.py
├result(自動生成)
└experiment01.py
以後の実験プロジェクトもほとんど同様のディレクトリ構造をとります.
Dockerfile
以前使用したものに
RUN python -m pip install pfrl
RUN python -m pip install gym==0.22.0
を追記しました.
FROM nvcr.io/nvidia/pytorch:22.04-py3
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV PYTHONPATH "/root/src:$PYTHONPATH"
RUN apt-get update
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN python -m pip install requests
RUN python -m pip install numpy
RUN python -m pip install pandas
RUN python -m pip install matplotlib
RUN python -m pip install scikit-learn
RUN python -m pip install optuna
RUN python -m pip install seaborn
RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
RUN python -m pip install japanize-matplotlib
RUN python -m pip install lightgbm
RUN python -m pip install notebook
RUN python -m pip install tqdm
RUN python -m pip install pandas_datareader
RUN python -m pip install yfinance
RUN python -m pip install xlrd
RUN python -m pip install pfrl
RUN python -m pip install gym==0.22.0
ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=user
RUN groupadd -g $GID $GROUPNAME && \
useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
echo $USERNAME:$PASSWORD | chpasswd
USER $USERNAME
docker-compose.yml
ほとんど前回書いたymlと変わりませんが, -../01_get_stock_price/src/dataset_2018_2023:/work/dataset
が追記されています.これにより前回生成したデータセットのディレクトリをマウントすることができます.
version: '3'
services:
stock_predict_python:
restart: always
build: .
container_name: 'python_stock_predict'
working_dir: '/work/src'
tty: true
volumes:
- ./src:/work/src
- ../02_get_stock_price/src/dataset_2018_2023:/work/dataset
ports:
- 8888:8888
ulimits:
memlock: -1
stack: -1
shm_size: '10gb'
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
コンテナの実行と仮想環境に入る
Dockerfileと同じディレクトリ上で実行します.
同一ネームの仮想環境が実行中だとエラーになるので,前章の仮想環境は終了してきてください.
仮想環境のビルド
docker compose up -d --build
仮想環境に入る
docker compose exec stock_predict_python bash
仮想環境の終了
docker compose down