如何在LinearRegression模型中使用字符串格式日期并完成取值范围转换
线性回归模型使用字符串格式日期的实现方案
1 日期格式转换(保留排序属性)
你需要先把MM/DD/YYYY格式的字符串日期转换为可数值化的时间特征,同时保证日期越靠后数值越大,天然符合排序要求:
- pandas批量转换示例:
import pandas as pd # 字符串转datetime对象 df["raw_date"] = pd.to_datetime(df["raw_date"], format="%m/%d/%Y")
2 数值归一化到[0,1)区间
你要求的类似0.2008的取值可以通过两种方式实现,都能保留排序逻辑,适配线性回归输入要求:
方式一:基于全量数据集的相对日期归一化
以全量数据最早日期为基准,最大日期为上限做归一化,保证所有值落在0~1之间:
# 计算距离最早日期的天数差 min_date = df["raw_date"].min() df["date_days"] = (df["raw_date"] - min_date).dt.days # 归一化到[0,1) max_days = df["date_days"].max() df["date_norm"] = df["date_days"] / (max_days + 1)
方式二:基于年份占比的归一化
可以直接输出和你示例格式一致的带年份标识的归一化值:
# 计算 年份+当年已过天数/全年天数 的格式 df["year_frac"] = df["raw_date"].dt.year + (df["raw_date"].dt.dayofyear / (366 if df["raw_date"].dt.is_leap_year else 365)) # 缩放到0~1区间,得到类似0.2008的取值 df["date_norm"] = df["year_frac"] / 10000
注意事项
- 归一化用到的最大、最小统计值必须从全量数据集计算,不能仅用训练集数据,否则会破坏全局排序逻辑,甚至出现测试集数值超出[0,1)范围的问题
- 转换后的
date_norm特征可以直接输入线性回归模型,模型可以正常识别时间趋势,不会出现排序混乱的问题
内容的提问来源于stack exchange,提问作者امیرحسین شکیبا
相关产品推荐
相关产品推荐

