###################################
# train model: double Ensemble
###################################
data_handler_config = {
"start_time": "2008-01-01",
"end_time": "2020-08-01",
"fit_start_time": "2012-01-01",
"fit_end_time": "2014-12-31",
"instruments": market,
}
task = {
"model": {
"class": "DEnsembleModel",
"module_path": "qlib.contrib.model.double_ensemble",
"kwargs": {
"base_model":"gbm",
"loss": "mse",
"num_models": 6,
"enable_sr": True,##
"enable_fs": True,##
"alpha1": 1.0,##
"alpha2": 1.0,##
"decay": 0.9,
"sample_ratios": [0.3, 0.3, 0.2, 0.1, 0.1],
"sub_weights": [0.3, 0.2, 0.2, 0.1, 0.1, 0.1],
},
},
"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", "2016-12-31"),
"valid": ("2017-01-01", "2019-12-31"),
"test": ("2020-01-01", "2020-09-025"),
},
},
},
}
# model initiaiton
model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"])
# start exp to train model
with R.start(experiment_name="train_model"):
R.log_params(**flatten_dict(task))
model.fit(dataset)
R.save_objects(trained_model=model)
rid = R.get_recorder().id
Traceback (most recent call last): File "C:\Users\Administrator\Anaconda3\lib\multiprocessing\pool.py", line 121, in worker result = (True, func(*args, **kwds)) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pyqlib-0.6.3.99-py3.7-win-amd64.egg\qlib\data\data.py", line 477, in expression_calculator obj[field] = ExpressionD.expression(inst, field, start_time, end_time, freq) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pyqlib-0.6.3.99-py3.7-win-amd64.egg\qlib\data\data.py", line 663, in expression series = expression.load(instrument, max(0, start_index - lft_etd), end_index + rght_etd, freq) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pyqlib-0.6.3.99-py3.7-win-amd64.egg\qlib\data\base.py", line 153, in load series = self._load_internal(instrument, start_index, end_index, freq) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pyqlib-0.6.3.99-py3.7-win-amd64.egg\qlib\data\ops.py", line 306, in _load_internal return getattr(np, self.func)(series_left, series_right) ValueError: operands could not be broadcast together with shapes (0,) (3011,) """
执行qlib workflow_by_code源代码, 数据集已获取成功,但好像这段代码并没有找到数据?
这个错误发生在两个数组的形状不能匹配时。在这种情况下,一个数组有0个元素(空数组),另一个数组有3011个元素。它们无法广播(匹配)在一起。
要解决这个问题,你需要检查代码中使用的numpy数组,并确保它们的形状正确匹配。你可以使用numpy库中的numpy.reshape()函数来改变数组的形状,以匹配另一个数组的形状。你也可以检查你的代码,看看是否有逻辑错误导致了这种形状不匹配的情况。