알 수없는 기능에서 기능 엔지니어링을 수행하는 방법은 무엇입니까?


19

카글 경쟁에 참여하고 있습니다. 데이터 세트에는 약 100 개의 기능이 있으며 모두 실제로는 무엇을 나타내는 지 알 수 없습니다. 기본적으로 그들은 단지 숫자입니다.

사람들은 이러한 기능에 대해 많은 기능 엔지니어링을 수행하고 있습니다. 정확히 알려지지 않은 기능에 대해 기능 공학을 정확히 수행 할 수있는 방법이 궁금합니다. 알려지지 않은 기능에 대해 기능 엔지니어링을 수행하는 방법에 대한 팁과 이해를 도와 줄 수 있습니까?

답변:


19

당신은 도메인 지식 (데이터가 무엇인지에 대한 지식이 필요하지 않습니다 의미를 (더 표현 방법을 찾는 기능 엔지니어링을하기 위해) 프레임 데이터).


으로 화 N. 설명 , 당신은 아주 쉽게 도움이 될 수있는 기능의 "신속하고 더러운"조합을 찾을 수 있습니다. 출력 와 개별 피처 x가 주어지면 x '{ e x , log ( x ) , x 2 , x 3 , tanh ( x ) } 변환을 수행 할 수 있습니다 . 변환의 유용성에 대한 빠른 검사는 { y , x } 의 상관 관계가yxx{ex,log(x),x2,x3,tanh(x)}{y,x} .{y,x}

상관 관계에 대한 경고 : 상관 관계는 모든 것을 표시하지 않으며 사용중인 모델 (NN 또는 RF와 같은 비선형) 및 다른 변수와의 상호 작용에 따라 상관 관계의 변화는 아무 의미가 없습니다.

그러나 로지스틱 회귀와 같은 간단한 선형 모형을 사용하는 경우 성능의 OK 표시기입니다. 그러나 Fokhruz Zaman이 지적한 것처럼 이러한 변환을 평가하는 가장 좋은 방법은 변환 된 기능이 있거나 없는 모델을 작성하고 교차 유효성 검사 접힘에서 유효성 검사 오류가 어떻게 진행되는지 확인하는 것입니다.

이런 방식으로 단일 기능 변환을 쉽게 발견 할 수 있습니다. 입력과 출력 사이의 표현 관계가 다른 규모 일 수있는 많은 데이터에 적용됩니다. 예를 들어, 소득과 "행복" 사이의 관계 는 로그인 것처럼 보이지만 참가자 소득의 로그는 직접 기록하지 않습니다.


DD2

NN의 내부 표현을 해석하거나 임의 포리스트의 기능 중요도를 해석하기가 어려울 수 있습니다. 이 목적에 더 쉽고 아마도 더 적합한 방법 인 모델은 의사 결정 트리를 사용 하여 강화 하는 것 입니다. Boosting을 구현하는 라이브러리가 많이 있으며 게시물이 암시하는 것처럼 Kaggle 경쟁 에 참여하는 경우 많은 참가자가 XGBoost를 사용하는 것 같습니다. 따라서 설명 할 내용에 대한 도움 / 자습서를 찾을 수 있습니다.

먼저 stumps , 1 레벨 의사 결정 트리 사용하여 부스팅 알고리즘을 실행하십시오 . 그루터기는 매우 약하지만 부스팅은 합리적인 모델입니다. 이것은 기준선으로 작동합니다. 사용중인 라이브러리에 따라 가장 많이 사용되는 기능을 매우 쉽게 표시 할 수 있어야하며, 패턴을 식별하기 위해 응답에 대해 기능을 플로팅하거나 응답이 범주 형인 경우 히스토그램을 작성해야합니다. 이것은 좋은 단일 기능 변환이 무엇인지에 대한 직관을 제공 할 수 있습니다.

그런 다음 2 단계 의사 결정 트리로 Boosting 알고리즘을 실행하십시오. 이 모델은 이전 모델보다 훨씬 더 복잡합니다. 두 변수가 함께 사용 된 것보다 더 큰 검정력을 갖는 경우,이 모델은 이전의 것보다 성능이 뛰어납니다 (훈련 오류의 관점이 아니라 유효성 검사 오류!). 이를 기반으로 함께 사용되는 변수를 추출 할 수 있어야하며,이를 통해 잠재적 인 다중 기능 변환이 가능합니다.


관련 자료에 따르면 다음 동영상을 쉽게 따라갈 수 있습니다.


4

기능 합계 : feat_1 + feat_2 + feat_3... 또는 해당 기능의 제품과 같은 다양한 기능 조합을 사용할 수 있습니다 . 또는 로그 또는 지수, 시그 모이 드로 피처를 변환하거나 숫자 피처를 범주 형으로 이산화 할 수도 있습니다. 탐험하기에는 무한한 공간입니다.

교차 검증 또는 테스트 세트 성능을 향상시키는 조합 또는 변환이 무엇이든 사용해야합니다.


2
"교차 검증 또는 테스트 세트 성능을 향상시키는 조합 또는 변환이 무엇이든 사용해야합니다."와 관련하여 약간의 문제가 있습니다. 무언가가 성과 지표를 개선 할 때까지 맹목적으로 시도하면 이해가되지 않는 관계를 발견하고 과적 합을 유발할 수 있습니다. 이로 인해 새로운 관측에서 성능이 저하 될 수 있습니다.
Hersheezy

1

다음 진술에 대한 구체적인 예를 더 자세히 설명해 주시겠습니까?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

데이터 세트와 주어진 속성을 잘 이해하지 않고 어떻게 기능 엔지니어링을 수행 할 수 있는지 잘 모르겠습니다 !!

테이블 형식 데이터는 변수 또는 특성 (열)으로 구성된 관찰 또는 인스턴스 (행) 측면에서 설명됩니다. 특성은 기능 일 수 있습니다.

"특성과 분리 된 피처의 개념은 문제의 맥락에서 더 의미가 있습니다. 피처는 문제에 유용하거나 의미가있는 특성입니다.이 특성은 모델링되는 문제 ... ... ...

컴퓨터 비전에서 이미지는 관찰이지만 기능은 이미지의 선일 수 있습니다.

자연어 처리에서 문서 또는 트윗은 관찰 일 수 있으며 구 또는 단어 수는 기능 일 수 있습니다.

음성 인식에서 발화는 관찰 일 수 있지만 기능은 한 단어 또는 음소 일 수 있습니다. "

자세한 내용은 다음 URL을 방문하십시오.

기능 엔지니어링, 기능 엔지니어링 방법 및 활용 방법 알아보기


OP의 경우 속성은 도메인 지식을 사용할 수없는 시점까지 익명화되었습니다. 이것은 Kaggle 경쟁에서 매우 일반적이지만 기능 엔지니어링의 제한된 형태는 여전히 가능합니다. 주제 지식을 사용하여 생성을 안내하는 것과는 대조적으로 새로운 기능은 대량으로 생성 된 후 테스트됩니다. 예 : kaggle.com/c/bnp-paribas-cardif-claims-managements/data
Neil Slater

Neil이 말했듯이 기능은 익명으로 처리되었습니다. 즉, 나는 그 진술에서 의미하는 바입니다.
user2409011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.