1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-06 04:20:57 +08:00

LightGBM hyperparameter

This commit is contained in:
Kenneth Tang
2021-05-13 23:12:29 +08:00
parent 8b15ffc027
commit f51e04a1cc
4 changed files with 176 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
# LightGBM hyperparameter
## Alpha158
First terminal
```
optuna create-study --study LGBM_158 --storage sqlite:///db.sqlite3
optuna-dashboard --port 5000 --host 0.0.0.0 sqlite:///db.sqlite3
```
Second terminal
```
python hyperparameter_158.py
```
## Alpha360
First terminal
```
optuna create-study --study LGBM_360 --storage sqlite:///db.sqlite3
optuna-dashboard --port 5000 --host 0.0.0.0 sqlite:///db.sqlite3
```
Second terminal
```
python hyperparameter_360.py
```

View File

@@ -0,0 +1,74 @@
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": "Alpha158",
"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_158', storage='sqlite:///db.sqlite3')
study.optimize(objective, n_jobs=6)

View File

@@ -0,0 +1,74 @@
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)

View File

@@ -0,0 +1,5 @@
pandas==1.1.2
numpy==1.17.4
lightgbm==3.1.0
optuna==2.7.0
optuna-dashboard==0.4.1