2025年构造时间序列特征训练数据集时的几个trick

构造时间序列特征训练数据集时的几个trick参考链接 1 评价指标 RMSE MAPE MSE MAE 计算 RMSE MAPE 2 构造 lagging def create lagging df df original i df1 df original copy df1 time interval begin df1

大家好,我是讯享网,很高兴认识大家。

参考链接

1、评价指标RMSE/MAPE/MSE/MAE

计算RMSE/MAPE

2、构造lagging

def create_lagging(df,df_original,i): df1=df_original.copy() df1['time_interval_begin']=df1['time_interval_begin']+pd.DateOffset(minutes=i*2) df1=df1.rename(columns={'travel_time':'lagging'+str(i)}) df2=pd.merge(df,df1[['link_ID','time_interval_begin','lagging'+str(i)]],on=['link_ID','time_interval_begin'],how='left') return df2 df1 = create_lagging(df, df, 1) for i in range(2, 6): df1 = create_lagging(df1, df, i) df1.head(6)

讯享网
  link_ID time_interval_begin travel_time date length width link_class in_links out_links links_num area link_ID_en lagging1 lagging2 lagging3 lagging4 lagging5
0 2017-04-01 06:00:00 1.026672 2017-04-01 57 3 1 1.0 1.0 1.0,1.0 171 49 NaN NaN NaN NaN NaN
1 2017-04-01 06:02:00 1.026672 2017-04-01 57 3 1 1.0 1.0 1.0,1.0 171 49 1.026672 NaN NaN NaN NaN
2 2017-04-01 06:04:00 1.014454 2017-04-01 57 3 1 1.0 1.0 1.0,1.0 171 49 1.026672 1.026672 NaN NaN NaN
3 2017-04-01 06:06:00 1.014454 2017-04-01 57 3 1 1.0 1.0 1.0,1.0 171 49 1.014454 1.026672 1.026672 NaN NaN
4 2017-04-01 06:08:00 1.014454 2017-04-01 57 3 1 1.0 1.0 1.0,1.0 171 49 1.014454 1.014454 1.026672 1.026672 NaN
5 2017-04-01 06:10:00 1.014454 2017-04-01 57 3 1 1.0 1.0 1.0,1.0 171 49 1.014454 1.014454 1.014454 1.026672 1.026672

3、 ①构造训练集,②模型调参找到合适的参数,③测试集导出未来几个时刻的结果;以上为接下来详述的三个部分

①构造训练集:

数据正则化,删除离群点。

找到缺失值,填充缺失值。

构造时间特征:lagging(12345)、day_of_week(这一天是周几,可以聚类减少分类)、hour_en(是一天的第几个小时,可以聚类)、week_hour(这个是由day_of_week和hour_en合并得到的,之后要独热编码)、vocation(是否为国家法定假期)......

构造相关重要特征(比如天池智慧交通中要构造与路况相关的特征):length(路长)、width(路宽)、in_links\out_links(出入度)、link_nums(这个是由in_links和out_links合并得到的,之后要进行独热编码)、ID_en(根据travel_time对ID进行排序生成新的id并作为特征)

独热编码和label编码的区别

什么情况下进行one hot 编码?。。。。

(1)解决类别型数据的离散值问题。


讯享网

(2)离散特征编码,离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就选择独热编码。使得非偏序关系的变量取值不具有偏序性,编码后的特征可以看做连续的特征,可以进行归一化。这里选择对week_hour进行独热编码。

(3)对ID进行one-hot编码,如果要进行label encode的话这里选择了和travel time相关的排序编码,缺点是这样容易过拟合。

(4)xgboost和随机森林能够同时处理连续和离散的特征,但是以现在的实现来看,这两者还不具备对把这1到132数字当做类别去看待,因为这两者(scikit的random forest和官方xgboost)对特征划分方式的实现(回归)是基于Numerical的, 与基于信息熵的决策树不同,他们会认为根据id的大小去选择划分点,因此对于想要使用scikit的随机森林和xgboost来说,onehot是必要的。

(5)基于numerical和基于信息熵有什么区别,为什么前者不能进行label编码,后者可以?

讯享网df2.loc[df2['day_of_week'].isin([1, 2, 3]), 'day_of_week_en'] = 1 df2.loc[df2['day_of_week'].isin([4, 5]), 'day_of_week_en'] = 2 df2.loc[df2['day_of_week'].isin([6, 7]), 'day_of_week_en'] = 3 df2.loc[df['time_interval_begin'].dt.hour.isin([6, 7, 8]), 'hour_en'] = 1 df2.loc[df['time_interval_begin'].dt.hour.isin([13, 14, 15]), 'hour_en'] = 2 df2.loc[df['time_interval_begin'].dt.hour.isin([16, 17, 18]), 'hour_en'] = 3 df2['week_hour'] = df2["day_of_week_en"].astype('str') + "," + df2["hour_en"].astype('str') df2.loc[df2['links_num'].isin(['0.0,2.0', '2.0,0.0', '1.0,0.0']), 'links_num'] = 'other' df2 = pd.get_dummies(df2, columns=['week_hour', 'links_num', 'width']) df2.head()

 

②得到训练集之后进行train and cross valid,关键是分几个cross valid(5~10个)

关键是cross valid的作用是什么?。。。。

(1)数据集较小时防止overfitting过拟合;找到合适的模型参数(可以选择平均n次训练的模型参数);

(2)数据集足够大时不需要交叉验证,因为训练时间要加倍,而数据集较大的时候训练时间成本太大并且没必要。

(3)天池的这个比赛当中可以选择进行交叉验证,采用5-交叉验证,并用平均值作为模型参数,训练的时候可以采用ParameterGrid()进行网格调参

③找到了合适的参数就可以在这个参数集的条件下进行训练和预测,预测的切片和长度可以在这个时候确定,输出格式也要注意。

 

小讯
上一篇 2025-01-18 18:58
下一篇 2025-04-08 10:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70116.html