gpt4 book ai didi

python - 使用 Scikit-learn 使用日期变量进行回归

转载 作者:IT老高 更新时间:2023-10-28 20:44:52 26 4
gpt4 key购买 nike

我有一个带有 date 列的 Pandas DataFrame(例如:2013-04-01)dtype datetime.date。当我在 X_train 中包含该列并尝试拟合回归模型时,我得到错误 float() argument must be a string or a number。删除 date 列可避免此错误。

在回归模型中考虑 date 的正确方法是什么?

代码

data = sql.read_frame(...)
X_train = data.drop('y', axis=1)
y_train = data.y

rf = RandomForestRegressor().fit(X_train, y_train)

错误

TypeError                                 Traceback (most recent call last)
<ipython-input-35-8bf6fc450402> in <module>()
----> 2 rf = RandomForestRegressor().fit(X_train, y_train)

C:\Python27\lib\site-packages\sklearn\ensemble\forest.pyc in fit(self, X, y, sample_weight)
292 X.ndim != 2 or
293 not X.flags.fortran):
--> 294 X = array2d(X, dtype=DTYPE, order="F")
295
296 n_samples, self.n_features_ = X.shape

C:\Python27\lib\site-packages\sklearn\utils\validation.pyc in array2d(X, dtype, order, copy)
78 raise TypeError('A sparse matrix was passed, but dense data '
79 'is required. Use X.toarray() to convert to dense.')
---> 80 X_2d = np.asarray(np.atleast_2d(X), dtype=dtype, order=order)
81 _assert_all_finite(X_2d)
82 if X is X_2d and copy:

C:\Python27\lib\site-packages\numpy\core\numeric.pyc in asarray(a, dtype, order)
318
319 """
--> 320 return array(a, dtype, copy=False, order=order)
321
322 def asanyarray(a, dtype=None, order=None):

TypeError: float() argument must be a string or a number

最佳答案

最好的方法是使用 1-of-K 编码将日期分解为一组以 bool 形式编码的分类特征(例如,由 DictVectorizer 完成)。以下是可以从日期中提取的一些特征:

  • 一天中的小时(24 个 bool 特征)
  • 星期几(7 个 bool 功能)
  • 一个月中的某天(最多 31 个 bool 特征)
  • 一年中的月份(12 个 bool 特征)
  • 年份(与数据集中不同年份的 bool 特征一样多)...

这应该可以识别典型人类生命周期中周期性事件的线性依赖关系。

此外,您还可以将日期提取为单个 float :将每个日期转换为自训练集的最小日期以来的天数,然后除以最大日期与训练集天数之间的天数之差最小日期。该数字特征应该可以识别事件日期输出之间的长期趋势:例如回归问题中的线性斜率,以更好地预测 future 年份的演变,该年份无法使用 bool 分类变量进行编码。

关于python - 使用 Scikit-learn 使用日期变量进行回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com