【问题标题】:Keeping zeros in data with sklearn使用 sklearn 在数据中保持零
【发布时间】:2017-07-24 07:19:07
【问题描述】:

我有一个 csv 数据集,正在尝试与 sklearn 一起使用。目标是预测未来的网络流量。但是,我的数据集在没有访客的日子里包含零,我想保留这个值。零访问者的天数比访问者的天数还要多(这是一个很小的站点)。看看数据吧

Col1 是日期:
2011 年 10 月 1 日
2011 年 10 月 2 日
2011 年 10 月 3 日
等等……

Col2 是访问者的数量: 12
1
0
0
1
5
0
0
等等……

sklearn 似乎将零值解释为 NaN 值,这是可以理解的。如何在逻辑函数中使用这些零值(甚至可能)?

更新: 估算器是https://github.com/facebookincubator/prophet,当我运行以下命令时:

df = pd.read_csv('~/tmp/datafile.csv')
df['y'] = np.log(df['y'])
df.head()

m = Prophet()
m.fit(df);

future = m.make_future_dataframe(periods=365)
future.tail()

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

m.plot(forecast);

m.plot_components(forecast);
plt.show

我得到以下信息:

growthprediction.py:7: RuntimeWarning: divide by zero encountered in log
  df['y'] = np.log(df['y'])
/usr/local/lib/python3.6/site-packages/fbprophet/forecaster.py:307: RuntimeWarning: invalid value encountered in double_scalars
  k = (df['y_scaled'].ix[i1] - df['y_scaled'].ix[i0]) / T
Traceback (most recent call last):
  File "growthprediction.py", line 11, in <module>
    m.fit(df);
  File "/usr/local/lib/python3.6/site-packages/fbprophet/forecaster.py", line 387, in fit
    params = model.optimizing(dat, init=stan_init, iter=1e4)
  File "/usr/local/lib/python3.6/site-packages/pystan/model.py", line 508, in optimizing
    ret, sample = fit._call_sampler(stan_args)
  File "stanfit4anon_model_35bf14a7f93814266f16b4cf48b40a5a_4758371668158283666.pyx", line 804, in stanfit4anon_model_35bf14a7f93814266f16b4cf48b40a5a_4758371668158283666.StanFit4Model._call_sampler (/var/folders/ym/m6j7kw0d3kj_0frscrtp58800000gn/T/tmp5wq7qltr/stanfit4anon_model_35bf14a7f93814266f16b4cf48b40a5a_4758371668158283666.cpp:16585)
  File "stanfit4anon_model_35bf14a7f93814266f16b4cf48b40a5a_4758371668158283666.pyx", line 398, in stanfit4anon_model_35bf14a7f93814266f16b4cf48b40a5a_4758371668158283666._call_sampler (/var/folders/ym/m6j7kw0d3kj_0frscrtp58800000gn/T/tmp5wq7qltr/stanfit4anon_model_35bf14a7f93814266f16b4cf48b40a5a_4758371668158283666.cpp:8818)
RuntimeError: k initialized to invalid value (nan)

【问题讨论】:

  • 这取决于您正在尝试的估算器。请使用您想尝试的估算器详细说明您的问题。
  • 在更新中添加了更多解释。

标签: machine-learning scikit-learn sklearn-pandas


【解决方案1】:

在这行代码中:

df['y'] = np.log(df['y'])

当您的 df['y'] 为零时,您将采用 0 的对数,这会导致结果数据集中出现警告和 NaN,因为未定义 0 的对数。

sklearn 本身不会将零值解释为 NaN,除非您在预处理中将它们替换为 NaN。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多