1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-07 13:00:58 +08:00

Merge branch 'main' of https://github.com/you-n-g/qlib into main

This commit is contained in:
meng-ustc
2020-11-26 15:16:02 +08:00
14 changed files with 346 additions and 276 deletions

View File

@@ -0,0 +1,10 @@
# ALSTM
- ALSTM contains a temporal attentive aggregation layer based on normal LSTM.
- The code used in Qlib is a pyTorch implementation of Code: https://github.com/fulifeng/Adv-ALSTM
- Paper: A dual-stage attention-based recurrent neural network for time series prediction.
https://www.ijcai.org/Proceedings/2017/0366.pdf

View File

@@ -5,8 +5,10 @@
**GitHub**: https://github.com/google-research/google-research/tree/master/tft
## Run the Workflow
Users can follow the ``workflow_by_code_tft.py`` to run the benchmark. Please be **aware** that this script can only support Python 3.5 - 3.8.
Users can follow the ``workflow_by_code_tft.py`` to run the benchmark.
### Notes
1. The model must run in GPU, or an error will be raised.
2. New datasets should be registered in ``data_formatters``, for detail please visit the source.
1. Please be **aware** that this script can only support `Python 3.5 - 3.8`.
2. If the CUDA version on your machine is not 10.0, please remember to run the following commands `conda install anaconda cudatoolkit=10.0` and `conda install cudnn` on your machine.
3. The model must run in GPU, or an error will be raised.
4. New datasets should be registered in ``data_formatters``, for detail please visit the source.

View File

@@ -10,6 +10,7 @@ import shutil
import tempfile
import statistics
from pathlib import Path
from operator import xor
from subprocess import Popen, PIPE
from threading import Thread
from pprint import pprint
@@ -174,11 +175,22 @@ def cal_mean_std(results) -> dict:
# function to get all the folders benchmark folder
def get_all_folders() -> dict:
def get_all_folders(models, exclude) -> dict:
folders = dict()
if isinstance(models, str):
model_list = models.split(",")
models = [m.lower().strip("[ ]") for m in model_list]
elif isinstance(models, list):
models = [m.lower() for m in models]
elif models is None:
models = [f.name.lower() for f in os.scandir("benchmarks")]
else:
raise ValueError("Input models type is not supported. Please provide str or list without space.")
for f in os.scandir("benchmarks"):
path = Path("benchmarks") / f.name
folders[f.name] = str(path.resolve())
add = xor(bool(f.name.lower() in models), bool(exclude))
if add:
path = Path("benchmarks") / f.name
folders[f.name] = str(path.resolve())
return folders
@@ -225,13 +237,44 @@ def gen_and_save_md_table(metrics):
# function to run the all the models
def run(times=1):
def run(times=1, models=None, exclude=False):
"""
Please be aware that this function can only work under Linux. MacOS and Windows will be supported in the future.
Any PR to enhance this method is highly welcomed.
Parameters:
-----------
times : int
determines how many times the model should be running.
models : str or list
determines the specific model or list of models to run or exclude.
exclude : boolean
determines whether the model being used is excluded or included.
Usage:
-------
Here are some use cases of the function in the bash:
.. code-block:: bash
# Case 1 - run all models multiple times
python run_all_model.py 3
# Case 2 - run specific models multiple times
python run_all_model.py 3 dnn
# Case 3 - run other models except those are given as arguments for multiple times
python run_all_model.py 3 [dnn,tft,lstm] True
# Case 4 - run specific models for one time
python run_all_model.py --models=[dnn,lightgbm]
# Case 5 - run other models except those are given as aruments for one time
python run_all_model.py --models=[dnn,tft,sfm] --exclude=True
"""
# get all folders
folders = get_all_folders()
folders = get_all_folders(models, exclude)
# set up
compatible = True
if sys.version_info < (3, 3):

View File

@@ -7,19 +7,16 @@ from pathlib import Path
import qlib
import pandas as pd
from qlib.config import REG_CN
from qlib.contrib.model.pytorch_gats import GAT
from qlib.contrib.data.handler import ALPHA360_Denoise
from qlib.contrib.strategy.strategy import TopkDropoutStrategy
from qlib.contrib.evaluate import (
backtest as normal_backtest,
risk_analysis,
)
from qlib.utils import exists_qlib_data
# from qlib.model.learner import train_model
from qlib.utils import init_instance_by_config
import pickle
if __name__ == "__main__":

View File

@@ -71,21 +71,22 @@ if __name__ == "__main__":
"module_path": "qlib.contrib.model.pytorch_sfm",
"kwargs": {
"d_feat": 6,
"hidden_size": 32,
"output_dim": 16,
"hidden_size": 64,
"output_dim": 32,
"freq_dim": 25,
"dropout_W": 0.5,
"dropout_U": 0.5,
"n_epochs": 200,
"n_epochs": 15,
"lr": 1e-3,
"batch_size": 200,
"metric": "",
"batch_size": 1600,
"early_stop": 20,
"eval_steps": 5,
"loss": "mse",
"lr_decay": 0.96,
"lr_decay_steps": 100,
"optimizer": "adam",
"GPU": 1,
"GPU": 3,
"seed": 710,
},
},