LightGBMError Traceback (most recent call last)
Cell In[8], line 24
1 params = {
2 'objective': 'regression',
3 'metric': 'l2',
(...)
20 'verbose': -1
21 }
23 # 保存模型
---> 24 save_model(features = features,
25 returns = returns,
26 model_path = model_path,
27 model_name = model_name,
28 start_di = start_di,
29 start_range = start_range,
30 update_fre = update_fre,
31 forecast_window = forecast_window,
32 codelist_num = codelist_num,
33 n_blocks=10,
34 train_ratio=0.8,
35 num_boost_round = 1000,
36 early_stopping_rounds = 50,
37 min_delta = 0.01,
38 params = params,
39 external_preds = external_preds)
Cell In[3], line 50, in save_model(features, returns, model_path, model_name, start_di, start_range, update_fre, forecast_window, n_blocks, train_ratio, num_boost_round, codelist_num, early_stopping_rounds, min_delta, params, external_preds)
48 # 2. 训练模型
49 print("\n=== 训练模型 ===")
---> 50 model = predictor.train_model(n_blocks=n_blocks,
51 train_ratio=train_ratio,
52 num_boost_round=num_boost_round,
53 early_stopping_rounds=early_stopping_rounds,
54 min_delta=min_delta,
55 external_preds=external_preds)
56 predictor.plot_l2_loss()
57 print("\n=== 保存模型 ===")
File ~\Desktop\框架2.0\sp\base_sp\ML_LGBM2.py:154, in StockReturnPredictor.train_model(self, n_blocks, train_ratio, num_boost_round, early_stopping_rounds, min_delta, external_preds)
151 evals_result = {}
153 print("开始训练回归模型(记录L2损失和Spearman相关系数)...")
--> 154 self.model = lgb.train(
155 self.params,
156 train_data,
157 num_boost_round=num_boost_round,
158 valid_sets=[train_data, val_data],
159 valid_names=['train', 'valid'],
160 callbacks=[
161 lgb.early_stopping(
162 stopping_rounds=early_stopping_rounds,
163 min_delta=min_delta,
164 verbose=True,
165 first_metric_only=True # 确保仅关注主指标
166 ),
167 lgb.log_evaluation(100),
168 lgb.record_evaluation(evals_result),
169
170 #可选:如果需要训练集的Spearman
171 self.record_spearman_callback(train_data, 'train', evals_result),
172
173 # 添加Spearman记录回调
174 self.record_spearman_callback(val_data, 'valid', evals_result),
175 ]
176 )
178 # 对比外部模型
179 if external_preds is not None:
File D:\anaconda\envs\myenv\lib\site-packages\lightgbm\engine.py:332, in train(params, train_set, num_boost_round, valid_sets, valid_names, feval, init_model, keep_training_booster, callbacks)
330 try:
331 for cb in callbacks_after_iter:
--> 332 cb(
333 callback.CallbackEnv(
334 model=booster,
335 params=params,
336 iteration=i,
337 begin_iteration=init_iteration,
338 end_iteration=init_iteration + num_boost_round,
339 evaluation_result_list=evaluation_result_list,
340 )
341 )
342 except callback.EarlyStopException as earlyStopException:
343 booster.best_iteration = earlyStopException.best_iteration + 1
File ~\Desktop\框架2.0\sp\base_sp\ML_LGBM2.py:122, in StockReturnPredictor.record_spearman_callback.<locals>.callback(env)
119 return
121 # 获取当前模型预测结果
--> 122 y_pred = env.model.predict(valid_data.get_data())
123 y_true = valid_data.get_label()
125 # 计算Spearman相关系数(忽略NaN值)
File D:\anaconda\envs\myenv\lib\site-packages\lightgbm\basic.py:3304, in Dataset.get_data(self)
3302 self._need_slice = False
3303 if self.data is None:
-> 3304 raise LightGBMError(
3305 "Cannot call `get_data` after freed raw data, "
3306 "set free_raw_data=False when construct Dataset to avoid this."
3307 )
3308 return self.data
LightGBMError: Cannot call `get_data` after freed raw data, set free_raw_data=False when construct Dataset to avoid this.
最新发布