RuntimeWarning -- 记EM算法踩的坑

探讨Baum-Welch算法在大量数据训练时出现的nan和inf问题及可能的原因,涉及计算溢出和除数为0的情况。

在实现Baum_Welch算法过程中,能够训练小数据量参数,但是如果数据量增加时,多次迭代后会出现nan的数据。并且会报以下错误:

RuntimeWarning: invalid value encountered in reduce
RuntimeWarning: overflow encountered in true_divide
RuntimeWarning: invalid value encountered in multiply
RuntimeWarning: invalid value encountered in double_scalars

产生这个原因时因为计算溢出。
初步认为可能是存在除数为0。
调试发现,首先出现了inf,接着出现nan。

在宗成庆老师的NLP课上,提及容易出现小数溢出的问题。

14:10:03 - cmdstanpy - INFO - Chain [1] start processing 14:10:16 - cmdstanpy - INFO - Chain [1] done processing 14:10:16 - cmdstanpy - ERROR - Chain [1] error: terminated by signal 3221225657 Optimization terminated abnormally. Falling back to Newton. 14:10:16 - cmdstanpy - INFO - Chain [1] start processing 14:10:17 - cmdstanpy - INFO - Chain [1] done processing 14:10:17 - cmdstanpy - ERROR - Chain [1] error: terminated by signal 3221225657 --------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) ~\anaconda3\lib\site-packages\prophet\models.py in fit(self, stan_init, stan_data, **kwargs) 125 try: --> 126 self.stan_fit = self.model.optimize(**args) 127 except RuntimeError as e: ~\anaconda3\lib\site-packages\cmdstanpy\model.py in optimize(self, data, seed, inits, output_dir, sig_figs, save_profile, algorithm, init_alpha, tol_obj, tol_rel_obj, tol_grad, tol_rel_grad, tol_param, history_size, iter, save_iterations, require_converged, show_console, refresh, time_fmt, timeout, jacobian) 658 else: --> 659 raise RuntimeError(msg) 660 mle = CmdStanMLE(runset) RuntimeError: Error during optimization! Command 'C:\Users\1\anaconda3\Lib\site-packages\prophet\stan_model\prophet_model.bin random seed=95430 data file=C:\Users\1\AppData\Local\Temp\tmpetj21adg\tst375we.json init=C:\Users\1\AppData\Local\Temp\tmpetj21adg\mp15em1r.json output file=C:\Users\1\AppData\Local\Temp\tmpetj21adg\prophet_modelnqznauyu\prophet_model-20250918141003.csv method=optimize algorithm=lbfgs iter=10000' failed: During handling of the above exception, another exception occurred: RuntimeError Traceback (most recent call last) <ipython-input-3-b16eae979bcc> in <module> 9 10 # 训练Prophet模型 ---> 11 prophet_model.fit(features) 12 13 # 创建未来日期数据框 ~\anaconda3\lib\site-packages\prophet\forecaster.py in fit(self, df, **kwargs) 1233 self.params = self.stan_backend.sampling(stan_init, dat, self.mcmc_samples, **kwargs) 1234 else: -> 1235 self.params = self.stan_backend.fit(stan_init, dat, **kwargs) 1236 1237 self.stan_fit = self.stan_backend.stan_fit ~\anaconda3\lib\site-packages\prophet\models.py in fit(self, stan_init, stan_data, **kwargs) 131 logger.warning('Optimization terminated abnormally. Falling back to Newton.') 132 args['algorithm'] = 'Newton' --> 133 self.stan_fit = self.model.optimize(**args) 134 params = self.stan_to_dict_numpy( 135 self.stan_fit.column_names, self.stan_fit.optimized_params_np) ~\anaconda3\lib\site-packages\cmdstanpy\model.py in optimize(self, data, seed, inits, output_dir, sig_figs, save_profile, algorithm, init_alpha, tol_obj, tol_rel_obj, tol_grad, tol_rel_grad, tol_param, history_size, iter, save_iterations, require_converged, show_console, refresh, time_fmt, timeout, jacobian) 657 get_logger().warning(msg) 658 else: --> 659 raise RuntimeError(msg) 660 mle = CmdStanMLE(runset) 661 return mle RuntimeError: Error during optimization! Command 'C:\Users\1\anaconda3\Lib\site-packages\prophet\stan_model\prophet_model.bin random seed=22563 data file=C:\Users\1\AppData\Local\Temp\tmpetj21adg\jt2wa909.json init=C:\Users\1\AppData\Local\Temp\tmpetj21adg\40g9otm4.json output file=C:\Users\1\AppData\Local\Temp\tmpetj21adg\prophet_modelgpn1w8pb\prophet_model-20250918141016.csv method=optimize algorithm=newton iter=10000' failed:
最新发布
09-19
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值