fbprophet:错误评估模型对数概率:非有限梯度
fbprophet: Error evaluating model log probability: Non-finite gradient
我收到以下错误:
我所做的就是运行这段代码。我已经使用了这个数据集 https://www.kaggle.com/camnugent/sandp500 但尝试了几个不同的数据集,并且所有的数据集都返回了这条消息。
pandas_df = pd.read_csv(file_path)
data_to_use = pandas_df.filter(['datetime', 'close'])
data_to_use.columns = ['ds', 'y']
data_to_use['ds'] = to_datetime(data_to_use['ds'])
model = Prophet()
model.fit(data_to_use)
future_dates = model.make_future_dataframe(periods=365)
prediction = model.predict(future_dates)
我已经在新的 conda 环境中安装了 pystan 和 fbprophet,python 3.7.10,pystan 2.19.1.1,fbprophet 0.7.1。
我不确定如何进行,所以任何建议将不胜感激。
我无法重现您的错误,但我相信我知道拟合失败的原因。
您尝试拟合的数据是超过 500 只股票的收盘价。当使用 data_to_use.plot.scatter(x='ds', y='y', s=0.01)
绘制时,您会得到:
我认为拟合失败,因为它只是在努力收敛到 this pystan
discourse thread 中提到的合理解决方案。当我天真地尝试拟合这些数据时,它并没有失败,而是在 y = 100
附近给出了一条几乎水平的线预测,误差线非常大。
根据您要执行的操作,我建议您通过 Name
选择一只股票,例如:
data_to_use_pcln = pandas_df[pandas_df.Name.eq('PCLN')].filter(['date', 'close'])
data_to_use_pcln.columns = ['ds', 'y']
data_to_use_pcln['ds'] = pd.to_datetime(data_to_use_pcln['ds'])
或像这样将每天的所有股票价格加在一起:
summed_data = pandas_df.groupby('date').agg('sum').reset_index().filter(['date', 'close'])
summed_data.columns = ['ds', 'y']
summed_data['ds'] = pd.to_datetime(summed_data['ds'])
将求和数据传递给model.fit()
给出了一个合理的解决方案:
我收到以下错误:
我所做的就是运行这段代码。我已经使用了这个数据集 https://www.kaggle.com/camnugent/sandp500 但尝试了几个不同的数据集,并且所有的数据集都返回了这条消息。
pandas_df = pd.read_csv(file_path)
data_to_use = pandas_df.filter(['datetime', 'close'])
data_to_use.columns = ['ds', 'y']
data_to_use['ds'] = to_datetime(data_to_use['ds'])
model = Prophet()
model.fit(data_to_use)
future_dates = model.make_future_dataframe(periods=365)
prediction = model.predict(future_dates)
我已经在新的 conda 环境中安装了 pystan 和 fbprophet,python 3.7.10,pystan 2.19.1.1,fbprophet 0.7.1。
我不确定如何进行,所以任何建议将不胜感激。
我无法重现您的错误,但我相信我知道拟合失败的原因。
您尝试拟合的数据是超过 500 只股票的收盘价。当使用 data_to_use.plot.scatter(x='ds', y='y', s=0.01)
绘制时,您会得到:
我认为拟合失败,因为它只是在努力收敛到 this pystan
discourse thread 中提到的合理解决方案。当我天真地尝试拟合这些数据时,它并没有失败,而是在 y = 100
附近给出了一条几乎水平的线预测,误差线非常大。
根据您要执行的操作,我建议您通过 Name
选择一只股票,例如:
data_to_use_pcln = pandas_df[pandas_df.Name.eq('PCLN')].filter(['date', 'close'])
data_to_use_pcln.columns = ['ds', 'y']
data_to_use_pcln['ds'] = pd.to_datetime(data_to_use_pcln['ds'])
或像这样将每天的所有股票价格加在一起:
summed_data = pandas_df.groupby('date').agg('sum').reset_index().filter(['date', 'close'])
summed_data.columns = ['ds', 'y']
summed_data['ds'] = pd.to_datetime(summed_data['ds'])
将求和数据传递给model.fit()
给出了一个合理的解决方案: