월 또는 시간과 같은 기능을 범주 또는 숫자로 인코딩합니까?


23

기계 학습 모델에서 월 및 시간과 같은 기능을 요소 또는 숫자로 인코딩하는 것이 더 낫습니까?

한편으로, 나는 시간이 앞으로 진행되는 과정이기 때문에 숫자 인코딩이 합리적이라고 생각하지만 (5 개월은 6 개월이 뒤 따름), 반면에 순환 인코딩으로 인해 범주 형 인코딩이 더 합리적이라고 생각합니다 연도 및 일수 (12 번째 달 다음에 첫 번째 달).

이에 대한 일반적인 해결책이나 규칙이 있습니까?


RF 모델에서 하루 중 시간 (1-24) 변수를 정의 할 때도 같은 문제가 발생했습니다. 변수를 categorical 형으로 변환하면 VarImp 함수는 각 시간의 중요도 값을 표시하며 매우 체계적으로 보이지 않습니다. '시간 중'유형 변수를 범주 형으로 변환 해야하는지 궁금합니다.
Mahmudur Rahman

답변:


19

시간 변수의 (사인, 코사인) 변환 추가를 고려 했습니까? 이를 통해 예를 들어 0 시간과 23 시간이 서로 가깝게 유지되므로 변수의 주기적 특성이 빛을 발할 수 있습니다.

( 추가 정보 )


sin (pi * X / 24) 여기서 [0, 23]의 X는 오전 6시와 오후 6시 동안 sin (pi * 6 / 24) == sin과 동일한 평가를 갖기 때문에 이런 문제가 있습니다. (pi * 18 / 24). 그러나 이것은 완전히 다른 시간입니다
Eran Moshe

sin (pi * X / 12)와 같은주기를 수행 할 수 있습니다. Thanks Eran :]
Eran Moshe

그것은 죄가 될 수 있도록 @EranMoshe는 참고 링크에서 게시물에 그들이 대신 2 * 파이의 요소를 사용하여 위의 (2 * 파이 * X / 12) - 그들은 의견이에 대한 몇 가지 이유를 제공
tsando

그리고 그 (2 * pi X / 24)는 (pi X / 12)입니다.] 보시다시피 blog.davidkaleko.com/feature-engineering-cyclical-features.html 의 저자와 똑같은 문제로 어려움을 겪었습니다. 고생했다. 그리고 코멘트에서 당신은 "Mariel G"가 내가 아는 바로 그를 교정하는 것을 볼 수 있습니다 : pi * X / 12는 하루 동안 한 시간 동안 순환 할 것입니다. 내가 또한 알게 된 것은 진정한 24 시간을 정의하기 위해 이것의 장단점을 취해야한다는 것입니다! (단순한 기능이 아닌 진정한 원이 필요합니다)
Eran Moshe

@EranMoshe 아 예, 몇 시간 이상하고 싶다면 piX / 12로 줄일 수 있지만 몇 달을 원한다면 2piX / 12 즉 pi / 6이됩니다. 따라서 일반적으로 2piX / 기간입니다
tsando

9

대답은 시간 기능과 대상 변수 사이에 나타내려는 관계의 종류에 따라 다릅니다.

시간을 숫자로 인코딩하면 모델에 특정 제한이 적용됩니다. 선형 회귀 모형의 경우 시간의 효과는 이제 단조로워지며 시간이 지남에 따라 대상이 증가 또는 감소합니다. 의사 결정 트리의 경우 서로 가까운 시간 값이 함께 그룹화됩니다.

범주 형 인코딩 시간은 모델에 더 많은 유연성을 제공하지만 경우에 따라 모델에 학습하기에 충분한 데이터가 없을 수도 있습니다. 유용 할 수있는 한 가지 기술은 시간 값을 몇 개의 세트로 그룹화하고 해당 세트를 범주 속성으로 사용하는 것입니다.

일부 그룹화 예 :

  • 월별로 유스 케이스에 따라 분기 또는 계절별로 그룹화하십시오. 예 : Jan-Mar, Apr-Jun 등
  • 하루 중 시간의 경우 오전, 저녁 등의 시간 버킷으로 그룹화합니다.
  • 요일의 경우 주중, 주말로 그룹화하십시오.

충분한 데이터가 주어지면 위의 각 항목을 범주 속성으로 직접 사용할 수도 있습니다. 또한, 그룹 지식은 도메인 지식 기반 접근법을 보완하기 위해 데이터 분석을 통해 발견 될 수도 있습니다.


4

숫자 기능을 사용하는 것이 좋습니다.범주 형 기능을 사용한다는 것은 본질적으로 두 범주 사이의 거리를 관련성이있는 것으로 간주하지 않음을 의미합니다 (예 : 범주 1은 범주 3과 범주 2에 가깝습니다). 몇 시간 또는 몇 달 동안은 그렇지 않습니다.

그러나 제기하는 문제는 12가 1에 가까운 11에 가까운 방식으로 시간과 월을 표현하고 싶다는 것입니다.이를 달성하기 위해서는 의견에서 제안 된 내용을 따르고 사용하는 것이 좋습니다 시간 / 월을 수치 적 특징으로 사용하기 전에 사인 / 코사인 함수.


3

사용중인 알고리즘에 따라 다릅니다.

임의 포리스트와 같은 트리 기반 알고리즘을 사용하는 경우이 질문을 전달하십시오. 트리 기반 알고리즘에는 범주 형 인코딩이 필요하지 않습니다.

신경망과 같은 다른 알고리즘의 경우 두 가지 방법 (연속 및 범주)을 시도하는 것이 좋습니다. 효과는 상황에 따라 다릅니다.


트리 기반 구현에 따라 다릅니다. scikit-learn 및 xgboost와 같이 널리 사용되는 패키지는 범주 형 변수를 인식하지 않습니다. 당신은 그들을 핫 핫 인코딩해야합니다.
Ricardo Cruz

이 게시물에서 : datascience.com/… 당신은 의사 결정 트리를 기반으로하는 것에 뜨거운 것을 사용해서는 안됩니다.
애슐리

1

당신이 가진 모든 데이터가 잘 정의되어 있기 때문에 범주 인코딩을 제안합니다.


1

@raghu가 제공 한 답변 을 바꾸려면 . 범주 형과 숫자 형 특징의 한 가지 주요 차이점은 숫자의 크기가 비슷한 지, 즉 2019가 2018보다 큰지, 12 월 (12)이 3 월 (3)보다 큰지 여부입니다. 실제로는 아닙니다. 이 숫자에는 순차적 인 순서가 있지만 크기는 비교할 수 없습니다. 따라서 범주 형 값으로 변환하는 것이 더 의미가있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.