기능 엔지니어링 유틸리티 : 기존 기능을 기반으로 새 기능을 작성하는 이유는 무엇입니까?


30

사람들이 기계 학습 문제의 기존 기능을 기반으로 새로운 기능을 만드는 경우가 종종 있습니다. 예를 들어, 여기 : https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ 사람들은 가족의 크기를 새로운 기능으로 간주했습니다. 기존 기능이었던 형제 자매 및 부모의 수

그러나 이것의 요점은 무엇입니까? 상관 관계가있는 새로운 기능을 만드는 것이 왜 유용한 지 모르겠습니다. 자체적으로 알고리즘을 수행하는 것이 아닌가요?


답변:


30

이를 설명하는 가장 간단한 예는 XOR 문제입니다 (아래 이미지 참조). y 좌표와 예측할 이진 클래스가 포함 된 데이터가 있다고 가정합니다 . 머신 러닝 알고리즘이 자체적으로 올바른 의사 결정 경계를 찾을 것으로 예상 할 수 있지만 추가 기능 z = x y 를 생성하면 z > 0 이 분류에 대한 거의 완벽한 의사 결정 기준을 제공하고 단순하게 사용 하므로 문제가 사소 해집니다. 산수!xyz=xyz>0

XOR problem

따라서 많은 경우 알고리즘에서 솔루션을 찾기를 기대할 수 있지만, 기능 엔지니어링을 통해 문제를 단순화 할 수 있습니다. 간단한 문제는 더 쉽고 빠르게 해결되며 덜 복잡한 알고리즘이 필요합니다. 간단한 알고리즘은 종종 더 강력하고 결과는 더 해석하기 쉬우 며 확장 성이 뛰어나고 (계산 리소스, 훈련 시간 등) 이식성이 뛰어납니다. 런던의 PyData 컨퍼런스에서 제공Vincent D. Warmerdam 의 멋진 이야기에서 더 많은 예제와 설명을 찾을 수 있습니다 .

또한 머신 러닝 마케팅 담당자가 말하는 모든 것을 믿지 마십시오. 대부분의 경우 알고리즘은 "자체적으로 학습"하지 않습니다. 일반적으로 시간, 리소스, 계산 능력이 제한적이며 데이터의 크기가 제한적이며 시끄 럽습니다.

이것을 극단으로 가져 가면 실험 결과에 대한 필기 노트의 사진으로 데이터를 제공하고 복잡한 신경망에 전달할 수 있습니다. 먼저 그림의 데이터를 인식하고 그것을 이해하고 예측하는 법을 배웁니다. 이를 위해서는 강력한 컴퓨터와 모델 훈련 및 튜닝을위한 많은 시간이 필요하며 복잡한 신경망을 사용하기 때문에 많은 양의 데이터가 필요합니다. 컴퓨터에서 읽을 수있는 형식 (숫자 표)으로 데이터를 제공하면 모든 문자 인식이 필요하지 않으므로 문제를 엄청나게 단순화합니다. 피처 엔지니어링을 다음 단계로 생각하면 의미있는 데이터를 생성하는 방식으로 데이터를 변환 할 수 있습니다.알고리즘은 독자적으로 알아내는 것이 훨씬 적습니다. 유추하기 위해, 당신은 외국어로 책을 읽고 싶었던 것이므로, 당신이 이해하는 언어로 번역 된 것을 읽는 것보다 먼저 언어를 배워야했습니다.

타이타닉 데이터 예제에서, 알고리즘은 "가족 규모"기능을 얻기 위해 가족 구성원을 합산하는 것이 합리적이라는 것을 알아 내야합니다 (예, 여기에서 개인화하고 있습니다). 이것은 사람에게는 명백한 기능이지만 데이터를 숫자의 일부 열로 볼 경우 분명하지 않습니다. 다른 열과 함께 고려할 때 어떤 열이 의미가 있는지 모르는 경우 알고리즘은 해당 열의 가능한 각 조합을 시도하여 열을 파악할 수 있습니다. 물론, 우리는 이것을하는 영리한 방법을 가지고 있지만, 여전히 정보가 알고리즘에 제공된다면 훨씬 쉽습니다.


감사합니다. 잘 설명되어 있고 매우 흥미 롭습니다!
Matthieu Veron 2016 년

귀하의 답변이 매우 좋지만 조금 자격을 얻는 것이 좋습니다. 특히, 상호 작용 항의 관점에서 피처 엔지니어링은 RF와 같은 알고리즘에 대해 많은 것을 단순화하지는 않는다고 생각합니다. RF는 자체적으로 상호 작용 항을 어느 정도 캡처하기 때문에 여전히 도움이 될 수 있습니다. 중요한 것이 빠지면 알려주세요. 그러나 일반적인 피처 엔지니어링에서는 예를 단순화하고 많은 것을 도와줍니다.
Poete Maudit

@PoeteMaudit 의사 결정 트리 (및 RF)가 하나의 큰 상호 작용을 모델링한다는 것은 사실이지만 가능한 모든 상호 작용이 아니라 특정 유형의 상호 작용입니다. 또한 기능 엔지니어링은 상호 작용에만 국한되지 않습니다.

분명히 나는 ​​당신의 요점에 동의합니다. 첫째, RF는 특정 종류의 상호 작용을 모델링합니다 (주로 x * y?). 둘째,이 기능 엔지니어링은 상호 작용에만 국한된 것이 아닙니다.
Poete Maudit

14

음, 간단한 선형 분류기를 사용하려는 경우 특히 도메인 지식에 따라 결과 기능이 의미 있고 유익한 것으로 표시되는 경우 기존 기능의 비선형 기능인 새 기능을 생성하는 것이 좋습니다. 선형 분류기는 명시 적으로 제공하지 않으면 이러한 복잡한 피쳐를 고려할 수 없습니다.

이상적으로, 충분히 강력한 비선형 분류 알고리즘을 사용하는 경우 분류에 유익한 입력 기능의 임의의 비선형 변환을 고려하는 결정 경계를 만들 수 있어야합니다. 그러나 실제로 대부분의 비선형 분류기는 일부 유형의 변환 만 살펴 봅니다. 예를 들어, 다항식 커널 SVM은 기능 간의 다항식 상호 작용을 고려하지만 다른 유형의 변환을 적용하여 더 유익한 기능을 만들 수 있습니다 ...

요컨대, 도메인 지식에 의해 수작업으로 만들어진 비선형 기능 조합이 유익한 정보라면 기존 기능 세트에 추가하는 것이 합리적입니다.


알았어! 그러나 내가 만든 기능이 의미 있고 유익한 지 어떻게 알 수 있습니까? 문제는 반 직관적 인 설명을 할 수 있습니다. 내가 이해 한 바에 따르면, 기능을 만드는 것은 알고리즘을 한 방향으로 조정하여 예측 시간을 절약하는 방법입니다. 몇 가지 방법으로 알고리즘에 영향을 미칩니다. 우리가 올바르게 영향을 미치는지 확인하는 방법?
Matthieu Veron 2018 년

2
예를 들어, 의료 진단 시스템을 설계하는 경우 의사와 상담하여 환자를 진단하기 위해 어떤 정보를 사용하는지 물어볼 수 있습니다. 예를 들어 한 의사가 "환자가 열과 두통을 모두 앓고 있다면 독감에 걸렸을 것"이라고 말합니다. 이 문장은 열과 두통의 존재를 나타내는 새로운 플래그 기능을 포함하는 것이 좋은 생각 일 수 있음을 나타낼 수 있습니다 (특히 다항식 상호 작용 기능을 자체적으로 볼 수없는 선형 분류기를 사용하는 경우).
Daniel López

1
그럼에도 불구하고 이것은 과학보다 예술에 가깝습니다. 결국, 공정하지 않은 실험 프로토콜을 사용하여 테스트 세트에서 모델을 테스트하여 직접 제작 한 기능의 유효성을 검증해야합니다.
Daniel López

3

머신 러닝 모델 중 일부는 변수 간의 비선형 성과 상호 작용을 처리 할 수 ​​있지만 상황에 따라 달라집니다. 세 가지 이유가 필요하다는 것을 알았습니다.

  1. 선형 회귀와 같은 일부 모델은 비선형 성을 자동으로 처리하지 않으므로 도움이되는 추가 기능을 만들어야합니다. 예를 들면 다음과 같습니다.와이=1 원과 같은 영역의 중심에 클러스터 된 대상 변수의

Circle Boundary

두 가지 기능 만 제공하면 x1 and x2. A simple linear model of y=x0+c1x1+c2x2 will not find any way to classify the target variable. So, instead, you need new quartic features to capture the non-linearity: y=x0+c1x12+c2x22.

  1. If you know in advance that some features (from business knowledge or experience), it may help create them to speed up the runtime of the model and make it easy for your model. For example, in your example of the Titanic data and if you are using a decision tree classification model. If you know that old ladies (age & gender) are more likely to survive, by creating a single feature that captures the information, your tree can make one split on the new variable instead of making two split on the two variables. It may speed up the computation time if you know in advance that the feature is significant.

  2. In the real world, you won't get a single dataset like Kaggle provides. Instead, you get information from all over the place. For example, if you want to predict customer attrition for an online retail company like Amazon, you have customer demography info, purchase transaction info. You need to generate a lot of feature from different sources, in this case, You will find a lot of useful features can be obtained/aggregated from the transaction level. As Andrew Ng puts it: Often times, the ability to do feature-engineering defines the success or failure of a machine learning project.

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