신경망에서 최적의 주간 기능 구성


19

회귀 문제를 다루면서 "요일"기능의 표현에 대해 생각하기 시작했습니다. 어떤 접근 방식이 더 나은지 궁금합니다.

  • 하나의 특징; 월요일의 1/7 값; 화요일 2/7 ...
  • 7 가지 특징 : 월요일의 (1, 0, 0, 0, 0, 0, 0); 화요일의 경우 (0, 1, 0, 0, 0, 0, 0) ...

네트워크 구성 차이로 인해 측정하기가 어렵습니다. (추가 6 기능은 내가 생각하는 숨겨진 노드 수에 반영되어야합니다.)

모든 기능의 수는 약 20입니다. 나는 단순한 역 전파를 사용하여 일반적인 피드 포워드 신경망을 학습합니다.


요일에 이진 인코딩을 사용하는 것은 어떻습니까? (0, 0, 0)이 일요일 인 3 가지 기능 월요일 등 (0, 0, 1)?
Shamoon

이것은 계산 시간을 줄이는 데 더 의미있는 기능으로 기능을 줄이는 이점이 있습니다
Shamoon

답변:


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'))

원시 대 죄 대 코사인

(사인 / 코사인 변수의 스케일을 -1/1이 아닌 0/30으로 조정하여 그래프가 더 좋아 보입니다)

보시다시피, 매월 말에 원시 "월요일 변수"가 0으로 되돌아가는 동안 사인 및 코사인 변환은 매월 끝날이 일과 비슷하다는 것을 모델에 알릴 수 있도록 부드럽게 전환합니다. 다음 달 초에 일.

푸리에 항의 나머지를 다음과 같이 추가 할 수 있습니다.

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

같은 것; 지표 변수를 사용하십시오. 첫 번째 인코딩은 적합하지 않은 유사성 측정을 유도합니다. 예를 들어, 일요일이 월요일과는 가장 다른 날입니까? 그것이 인코딩이 의미하는 바입니다.
Emre

@OepasDost 내 게시물이 귀하의 질문에 대한 답변 인 경우, 확인 표시를 클릭하여 자유롭게 투표하거나 수락하십시오.
Zach

@Zach 왜 당신이 요일 (0에서 6까지 인코딩 될 수 있는가)을 범주 형으로, 월을 서 수적 순환 (따라서 푸리에 변환을 사용)으로 고려하겠습니까? 둘 다 서수 순환 형이 아니므로 요일에 푸리에 변환을 수행합니까?
zipp

1
@zipp 요일에도 푸리에를 사용할 수 있습니다. 내 경험에 따르면 요일의 기본 값은 주중과 주말의 차이이며 더미 변수 (또는 지표 변수)로 캡처하는 것이 매우 간단합니다.
Zach
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.