ConvergenceWarning:最大似然减慢内核-运行-时间?
ConvergenceWarning: Maximum Likelihood slows kernel-run-time?
我使用非常简单的代码对象 arma_order_select_ic
来找到用于选择 p 和 q 值的最低信息标准。
我不确定我是否做对了,或者代码是否偶然发现了一些错误...
在:
y = indexed_df
res = arma_order_select_ic(y, max_ar=7, max_ma=7, ic=['aic', 'bic', 'hqic'], trend='c', fit_kw=dict(method='css'))
print res
print ('AIC-order: {}' .format(res.aic_min_order))
print ('BIC-order: {}' .format(res.bic_min_order))
print ('HQIC-order: {}' .format(res.hqic_min_order))
输出:
/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/base/model.py:466: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
另外:它打印出三个矩阵式列表(每个 IC 一个矩阵)和最终推荐:
AIC-order: (7, 5)
BIC-order: (7, 0)
HQIC-order: (7, 0)
所以,整个事情似乎都奏效了。
问题是,它需要大约 30-60 秒,因为每次计算都会打印警告,即超级慢!
我检查了相关的源代码(statsmodels/base/model.py)以及如何跳过打印 CovergenceWarning:
#TODO: hardcode scale?
if isinstance(retvals, dict):
mlefit.mle_retvals = retvals
if warn_convergence and not retvals['converged']:
from warnings import warn
from statsmodels.tools.sm_exceptions import ConvergenceWarning
warn("Maximum Likelihood optimization failed to converge. "
"Check mle_retvals", ConvergenceWarning)
mlefit.mle_settings = optim_settings
return mlefit
所以我尝试删除链接到 ConvergenceWarning 的 if 部分,但它不起作用。
这部分来自相同的源代码:
mle_retvals : dict
Contains the values returned from the chosen optimization method if
full_output is True during the fit. Available only if the model
is fit by maximum likelihood. See notes below for the output from
the different methods.
没有告诉我在哪里以及如何更改mle_retvals
如何查看 mle_retvals 以及要更改的内容?
有没有办法让 ConvergenceWarning 消失,从而使计算 运行 更快?
注释部分中的文档明确说明了如何加快速度...请参阅 fit_kw
的文档字符串以更改提供给 ARMA.fit
方法的参数。对于大量模型,这会很慢。这是一个天真的实现,只是对它们进行成对拟合。尝试 method='css'
以获得更快的结果。
不知道你为什么要改mle_retvals
。它位于 returns 部分。这不是你直接改变的东西。您不必删除任何源代码即可将内容添加到 运行。这张支票是为了警告你事情出了问题。也就是说,可能是导致这些警告的模型对于您的数据来说真的很差。
您可以尝试隐藏警告。
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore", category=ConvergenceWarning)
y = indexed_df
res = arma_order_select_ic(y, max_ar=7, max_ma=7, ic=['aic', 'bic', 'hqic'], trend='c', fit_kw=dict(method='css'))
print res
print ('AIC-order: {}' .format(res.aic_min_order))
print ('BIC-order: {}' .format(res.bic_min_order))
print ('HQIC-order: {}' .format(res.hqic_min_order))
我使用非常简单的代码对象 arma_order_select_ic
来找到用于选择 p 和 q 值的最低信息标准。
我不确定我是否做对了,或者代码是否偶然发现了一些错误...
在:
y = indexed_df
res = arma_order_select_ic(y, max_ar=7, max_ma=7, ic=['aic', 'bic', 'hqic'], trend='c', fit_kw=dict(method='css'))
print res
print ('AIC-order: {}' .format(res.aic_min_order))
print ('BIC-order: {}' .format(res.bic_min_order))
print ('HQIC-order: {}' .format(res.hqic_min_order))
输出:
/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/base/model.py:466: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
另外:它打印出三个矩阵式列表(每个 IC 一个矩阵)和最终推荐:
AIC-order: (7, 5)
BIC-order: (7, 0)
HQIC-order: (7, 0)
所以,整个事情似乎都奏效了。
问题是,它需要大约 30-60 秒,因为每次计算都会打印警告,即超级慢!
我检查了相关的源代码(statsmodels/base/model.py)以及如何跳过打印 CovergenceWarning:
#TODO: hardcode scale?
if isinstance(retvals, dict):
mlefit.mle_retvals = retvals
if warn_convergence and not retvals['converged']:
from warnings import warn
from statsmodels.tools.sm_exceptions import ConvergenceWarning
warn("Maximum Likelihood optimization failed to converge. "
"Check mle_retvals", ConvergenceWarning)
mlefit.mle_settings = optim_settings
return mlefit
所以我尝试删除链接到 ConvergenceWarning 的 if 部分,但它不起作用。
这部分来自相同的源代码:
mle_retvals : dict
Contains the values returned from the chosen optimization method if
full_output is True during the fit. Available only if the model
is fit by maximum likelihood. See notes below for the output from
the different methods.
没有告诉我在哪里以及如何更改mle_retvals
如何查看 mle_retvals 以及要更改的内容?
有没有办法让 ConvergenceWarning 消失,从而使计算 运行 更快?
注释部分中的文档明确说明了如何加快速度...请参阅 fit_kw
的文档字符串以更改提供给 ARMA.fit
方法的参数。对于大量模型,这会很慢。这是一个天真的实现,只是对它们进行成对拟合。尝试 method='css'
以获得更快的结果。
不知道你为什么要改mle_retvals
。它位于 returns 部分。这不是你直接改变的东西。您不必删除任何源代码即可将内容添加到 运行。这张支票是为了警告你事情出了问题。也就是说,可能是导致这些警告的模型对于您的数据来说真的很差。
您可以尝试隐藏警告。
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore", category=ConvergenceWarning)
y = indexed_df
res = arma_order_select_ic(y, max_ar=7, max_ma=7, ic=['aic', 'bic', 'hqic'], trend='c', fit_kw=dict(method='css'))
print res
print ('AIC-order: {}' .format(res.aic_min_order))
print ('BIC-order: {}' .format(res.bic_min_order))
print ('HQIC-order: {}' .format(res.hqic_min_order))