1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-02 18:40:58 +08:00
Files
qlib/examples/hyperparameter/LightGBM/hyperparameter_360.py
2021-05-13 23:12:29 +08:00

75 lines
2.6 KiB
Python

import qlib
from qlib.config import REG_CN
from qlib.utils import exists_qlib_data, init_instance_by_config
import optuna
provider_uri = "~/.qlib/qlib_data/cn_data"
if not exists_qlib_data(provider_uri):
print(f"Qlib data is not found in {provider_uri}")
sys.path.append(str(scripts_dir))
from get_data import GetData
GetData().qlib_data(target_dir=provider_uri, region='cn')
qlib.init(provider_uri=provider_uri, region='cn')
market = "csi300"
benchmark = "SH000300"
data_handler_config = {
'start_time': '2008-01-01',
'end_time': '2020-08-01',
'fit_start_time': '2008-01-01',
'fit_end_time': '2014-12-31',
'instruments': market
}
dataset_task = {
"dataset": {
"class": "DatasetH",
"module_path": "qlib.data.dataset",
"kwargs": {
"handler": {
"class": "Alpha360",
"module_path": "qlib.contrib.data.handler",
"kwargs": data_handler_config,
},
"segments": {
'train': ('2008-01-01', '2014-12-31'),
'valid': ('2015-01-01', '2016-12-31'),
'test': ('2017-01-01', '2020-08-01'),
},
},
},
}
dataset = init_instance_by_config(dataset_task["dataset"])
def objective(trial):
task = {
"model": {
"class": "LGBModel",
"module_path": "qlib.contrib.model.gbdt",
"kwargs": {
"loss": "mse",
"colsample_bytree": trial.suggest_uniform('colsample_bytree', 0.5, 1),
"learning_rate": trial.suggest_uniform('learning_rate', 0, 1),
"subsample": trial.suggest_uniform('subsample', 0, 1),
"lambda_l1": trial.suggest_loguniform('lambda_l1', 1e-8, 1e+4),
"lambda_l2": trial.suggest_loguniform('lambda_l2', 1e-8, 1e+4),
"max_depth": 10,
"num_leaves": trial.suggest_int('num_leaves', 1, 1024),
'feature_fraction': trial.suggest_uniform('feature_fraction', 0.4, 1.0),
'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0.4, 1.0),
'bagging_freq': trial.suggest_int('bagging_freq', 1, 7),
'min_data_in_leaf': trial.suggest_int('min_data_in_leaf', 1, 50),
'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),
},
},
}
evals_result = dict()
model = init_instance_by_config(task["model"])
model.fit(dataset, evals_result=evals_result)
return min(evals_result['valid'])
study = optuna.Study(study_name='LGBM_360', storage='sqlite:///db.sqlite3')
study.optimize(objective, n_jobs=6)