神经网络中日特征的最佳构造


19

在处理回归问题时,我开始考虑“星期几”功能的表示形式。我想知道哪种方法会更好:

  • 一个特征 周一值1/7;星期二2/7 ...
  • 7个功能:(1、0、0、0、0、0、0)为星期一;(0,1,0,0,0,0,0)for Tuesday ...

由于网络配置差异,很难对其进行衡量。(我认为其他六个功能应该反映在隐藏节点的数量上。)

所有功能的数量大约是20。我使用简单的反向学习器来学习普通的前馈神经网络。


在星期几使用二进制编码怎么办?3个功能,其中(0,0,0)是星期日。(0,0,1)for Monday,依此类推?
Shamoon'3

这具有将功能简化为更有意义以减少计算时间的额外好处
Shamoon,2015年

Answers:


23

对于分类变量(例如星期几),第二个表示形式更为传统。

这也称为创建伪变量,并且是一种用于编码分类变量的广泛使用的方法。如果您使用1-7编码,则会告诉模型第4天和第5天非常相似,而第1天和第7天则非常不同。实际上,第1天和第7天与第4天和第5天相似。相同的逻辑在一个月的几天中支持0-30编码。

每月的日子比较棘手,因为虽然每周都有相同的7天,但并非每个月都有相同的30天:有些月份有31天,有些月份有28天。由于周和月都是周期性的,因此可以使用傅立叶变换将其转换为平滑的线性变量。

例如(使用我选择的编程语言R):

day_of_month = c(1:31, 1:28, 1:30)
day_of_year <- 1:length(day_of_month)
s = sin((2*pi)/30*day_of_month)
c = cos((2*pi)/30*day_of_month)
plot(day_of_month ~ day_of_year)
lines(15*s+15 ~ day_of_year, col='blue')
lines(15*c+15 ~ day_of_year, col='red')
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))

原始vs犯罪vs余弦

(我将正弦/余弦变量缩放为0/30,而不是-1/1,因此图形看起来更好)

如您所见,虽然原始的“每月的天变量”在每个月末跳回零,但正弦和余弦变换会进行平滑过渡,使模型知道一个月末的天数与下个月初的几天。

您可以添加其余的傅立叶项,如下所示:

for(i in 1:3){
  s = sin((2*pi)/30*day_of_month + 30 * i/4)
  c = cos((2*pi)/30*day_of_month + 30 * i/4)
  lines(15*s+15 ~ day_of_year, col='blue')
  lines(15*c+15 ~ day_of_year, col='red')
}
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))

完成转换

每对正弦/余弦波都构成一个圆圈:

m <- lapply(1:4, function(i){
  as.matrix(
    data.frame(
    s = sin((2*pi)/30*day_of_month + 30 * i/4),
    c = cos((2*pi)/30*day_of_month + 30 * i/4)
    )
  )
})
m <- do.call(cbind, m)
pairs(m)

圈 本页非常方便地说明了如何操作正弦波和余弦波。


是否有任何特定原因?我想知道它如何影响融合。我的第二个疑问是,何时变量仍是分类变量-月的某天呢?(0-30)
Oepas Dost 2014年

一样; 使用指标变量。第一次编码会导致可能不适合的相似性度量;例如,星期日真的和星期一最不一样吗?这就是编码的含义……
Emre 2014年

@OepasDost如果我的帖子回答了您的问题,请随时通过单击对勾来投票和/或接受。
2014年

@Zach为什么将周几(可以从0到6编码)视为分类,将周几视为有序循环(因此使用傅里叶变换)。难道它们都不都是周期性的,因此一周中的某天也都进行傅立叶变换吗?
zipp

1
@zipp您也可以在一周中的某一天使用傅立叶。根据我的经验,星期几的主要值是工作日和周末之间的差,使用虚拟变量(或指标变量)很容易捕获。
Zach
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.