虽然针对ML算法进行数据预处理和特征工程设计,但日期和时间对于我的问题而言非常重要,因此我希望将其编码为循环变量。我在数据集中大约有6k-7k数据点,其中包含1到31的日期范围,1到12的月份范围,00到23的时间段,00到59的时间段。因此,我将时间戳分为年,月,日,小时和分钟列。
我进一步按照此处https://ianlondon.github.io/blog/encoding-cyclical-features-24hour-time/的说明对月,日,小时和分钟进行了编码,因此算法“获得了分数”。 11月1日和10月31日(以天计)比10月25日和10月31日彼此更接近。
这是我用来转换组件的代码:
# Transform the cyclical features
cyclic_df['min_sin'] = np.sin(cyclic_df.minute*(2.*np.pi/59)) # Sinus component of minute
cyclic_df['min_cos'] = np.cos(cyclic_df.minute*(2.*np.pi/59)) # Cosinus component of minute
cyclic_df['hr_sin'] = np.sin(cyclic_df.hour*(2.*np.pi/23)) # Sinus component of hour
cyclic_df['hr_cos'] = np.cos(cyclic_df.hour*(2.*np.pi/23)) # Cosinus component of hour
cyclic_df['d_sin'] = np.sin(cyclic_df.day*(2.*np.pi/30)) # Sinus component of day
cyclic_df['d_cos'] = np.cos(cyclic_df.day*(2.*np.pi/30)) # Cosinus component of day
cyclic_df['mnth_sin'] = np.sin((cyclic_df.month-1)*(2.*np.pi/12)) # Sinus component of minute
cyclic_df['mnth_cos'] = np.cos((cyclic_df.month-1)*(2.*np.pi/12)) # Cosinus component of minute
# We drop the useless features, because we don't need them anymore, as for this model we extracted from it all features that we need.
cyclic_df.drop(['minute', 'hour', 'day', 'month'], axis=1, inplace=True)
我的3个问题: 1)如何在绘图上添加小时(00-23),月份(1-12),日期(1-31)? 2)如何更改每个子图标题的字体大小?以及如何减少字幕和子图之间的间隔?很大! 3)我可以使用Seaborn在上面绘制相同的图,以使该图看起来更好并且具有更好的调色板吗?
这是我用来绘制的代码:
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12,12))
fig.suptitle("Representation Of Cyclical Features", fontsize=16)
cyclic_df.sample(6000).plot.scatter('d_cos','d_sin', title='Cyclical Days Transformation',
ax=axes[0,0]).set_aspect('equal')
cyclic_df.sample(6000).plot.scatter('mnth_cos','mnth_sin', title='Cyclical Months Transformation', ax=axes[0,1]).set_aspect('equal')
cyclic_df.sample(6000).plot.scatter('hr_cos','hr_sin', title='Cyclical Hours Transformation', ax=axes[1,0]).set_aspect('equal')
cyclic_df.sample(6000).plot.scatter('min_cos','min_sin',title='Cyclical Minutes Transformation', ax=axes[1,1]).set_aspect('equal')