使用 sklearn 在数据中保持零

Posted

技术标签:

【中文标题】使用 sklearn 在数据中保持零【英文标题】:Keeping zeros in data with 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)

【问题讨论】:

这取决于您正在尝试的估算器。请使用您想尝试的估算器详细说明您的问题。 在更新中添加了更多解释。 【参考方案1】:

在这行代码中:

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

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

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

【讨论】:

以上是关于使用 sklearn 在数据中保持零的主要内容,如果未能解决你的问题,请参考以下文章

sklearn:最近邻搜索sklearn.neighbors

具有多个标签的 sklearn 确定性回归

使用 Sklearn 的算法模型持久性

带有 Sklearn 的 MNIST 数据集

Sklearn 与 TensorFlow 机器学习实用指南第二版

sklearn乳腺癌数据集数据含义