Simple time series linear regression处理销售数据运行异常求助
线性回归拟合日期字段失败解决方案
根因说明
scikit-learn的线性回归模型仅接受数值型特征作为输入,你当前使用的Date字段是字符串格式的日期,不属于可直接参与运算的数值类型,因此fit方法会直接报错。
修复步骤
你需要先将日期字段转换为代表时间顺序的数值特征,最常用的方式是转换为自起始日期起的天数差,代码示例如下:
import pandas as pd from sklearn.linear_model import LinearRegression # 第一步:将日期列转换为pandas datetime格式 df['Date'] = pd.to_datetime(df['Date']) # 第二步:转换为自最小日期开始的天数差(数值型特征) df['Date_num'] = (df['Date'] - df['Date'].min()).dt.days # 拟合模型时使用转换后的数值特征 X = df[['Date_num']] y = df['Sales'] model = LinearRegression() model.fit(X, y) # 预测时也需要对目标日期做相同转换 predict_date = pd.to_datetime('2021-1-1') X_predict = (predict_date - df['Date'].min()).days # 注意输入给predict的需要是二维数组格式 y_predict = model.predict([[X_predict]])
补充说明
- 如果你需要加入年、月、日的周期性特征,可以单独提取
df['Year'] = df['Date'].dt.year、df['Month'] = df['Date'].dt.month、df['Day'] = df['Date'].dt.day作为补充特征输入模型,拟合效果会更好 - 不要直接对原始字符串格式的日期做任何数值运算,必须先通过
pd.to_datetime完成格式转换
内容的提问来源于stack exchange,提问作者juge
相关产品推荐
相关产品推荐

