如何从NumPy数组中移除Timestamp以进行线性回归分析
解决线性回归中Timestamp类型的报错问题
这个报错的核心原因很明确:线性回归模型只能处理数值型输入,而你当前的自变量集X里包含了Timestamp这种datetime类型的数据,模型在尝试将其转换为float时自然会失败。下面分两种常见场景给你解决方案:
场景1:不需要将Date作为自变量
如果你认为日期对预测结果没有影响,或者已经通过Score列涵盖了时间趋势,那最简单的方法就是直接从自变量中移除Date列:
修改构建X的代码,直接指定只使用Score列,或者同时删除Date和Prediction列:
# 方法1:仅保留Score列作为自变量 X = np.array(df[['Score']]) X = X[:-forecast_out] # 方法2:删除不需要的Date和Prediction列 X = np.array(df.drop(['Prediction', 'Date'], axis=1)) X = X[:-forecast_out]
这样X就只包含数值型数据,再执行后续的划分数据集和模型训练步骤就不会报错了。
场景2:需要将Date作为自变量(时间趋势是重要特征)
如果日期是预测的关键因素(比如Score随时间有明显上升/下降趋势),那你需要把Timestamp转换成模型能识别的数值型特征,这里提供几种常用的转换方式:
方式1:转换为Unix时间戳(秒数)
将Timestamp转换为从1970-01-01开始的秒数,这是一种通用的数值化方式:
# 先将Date列转换为Unix时间戳(秒) df['Date'] = df['Date'].astype('int64') // 10**9 # 除以10^9是因为astype('int64')得到的是纳秒 # 再构建自变量集 X = np.array(df.drop(['Prediction'], axis=1)) X = X[:-forecast_out]
方式2:提取时间分量特征
如果时间的年/月/日等分量有单独的预测价值,可以提取这些特征代替原始Date列:
# 提取年、月、日特征 df['Year'] = df['Date'].dt.year df['Month'] = df['Date'].dt.month df['Day'] = df['Date'].dt.day # 删除原始Date列和Prediction列,用新特征构建X X = np.array(df.drop(['Prediction', 'Date'], axis=1)) X = X[:-forecast_out]
方式3:转换为相对天数
计算每个日期距离数据集起始日期的天数,能更好地体现时间的连续趋势:
# 计算每个日期相对于第一个日期的天数 df['Days_Since_Start'] = (df['Date'] - df['Date'].min()).dt.days # 删除原始Date列和Prediction列,用相对天数构建X X = np.array(df.drop(['Prediction', 'Date'], axis=1)) X = X[:-forecast_out]
完成转换后,你可以先打印X.dtype确认数据类型是数值型(比如float64或int64),再执行后续的train_test_split和模型训练步骤,就能解决这个TypeError问题了。
内容的提问来源于stack exchange,提问作者MRL
相关产品推荐
相关产品推荐

