Użyteczność inżynierii funkcji: Po co tworzyć nowe funkcje w oparciu o istniejące funkcje?

30

Często widzę, że ludzie tworzą nowe funkcje w oparciu o istniejące funkcje związane z problemem uczenia maszynowego. Na przykład tutaj: https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ ludzie uważają, że wielkość rodziny osoby jest nową funkcją na temat liczby braci, sióstr i rodziców, które były cechami istniejącymi.

Ale po co to? Nie rozumiem, dlaczego tworzenie nowych skorelowanych funkcji jest przydatne. Czy zadaniem algorytmu nie jest robienie tego samodzielnie?

Matthieu Veron
źródło
Powiązane: stats.stackexchange.com/questions/349155/…
Sycorax mówi Przywróć Monikę

Odpowiedzi:

30

Najprostszym przykładem użytym do zilustrowania tego jest problem XOR (patrz obrazek poniżej). Wyobraź sobie, że otrzymujesz dane zawierające i y skoordynowane oraz klasę binarną do przewidzenia. Można oczekiwać, że algorytm uczenia maszynowego sam odkryje prawidłową granicę decyzyjną, ale jeśli wygenerowano dodatkową funkcję z = x y , problem staje się trywialny, ponieważ z > 0 daje prawie idealne kryterium decyzyjne dla klasyfikacji i zastosowałeś po prostu prosty arytmetyka!xyz=xyz>0

Problem XOR

Podczas gdy w wielu przypadkach można oczekiwać od algorytmu znalezienia rozwiązania, alternatywnie, dzięki inżynierii funkcji, można uprościć problem. Proste problemy są łatwiejsze i szybsze do rozwiązania i wymagają mniej skomplikowanych algorytmów. Proste algorytmy są często bardziej niezawodne, wyniki są często bardziej interpretowalne, są bardziej skalowalne (mniej zasobów obliczeniowych, czas na szkolenie itp.) I przenośne. Więcej przykładów i wyjaśnień można znaleźć we wspaniałym przemówieniu Vincenta D. Warmerdama, wygłoszonym na konferencji PyData w Londynie .

Co więcej, nie wierz we wszystko, co mówią ci specjaliści od uczenia maszynowego. W większości przypadków algorytmy nie „uczą się same”. Zwykle masz ograniczony czas, zasoby, moc obliczeniową, a dane mają zwykle ograniczony rozmiar i są hałaśliwe, co nie pomaga.

Biorąc to do skrajności, możesz podać swoje dane jako zdjęcia odręcznych notatek z wyniku eksperymentu i przekazać je do skomplikowanej sieci neuronowej. Najpierw nauczyłby się rozpoznawać dane na zdjęciach, a następnie nauczyć się je rozumieć i przewidywać. Aby to zrobić, potrzebujesz potężnego komputera i dużo czasu na szkolenie i dostrajanie modelu oraz potrzebujesz ogromnych ilości danych z powodu korzystania ze skomplikowanej sieci neuronowej. Dostarczenie danych w formacie czytelnym dla komputera (jako tabele liczb) znacznie upraszcza problem, ponieważ nie potrzebujesz całego rozpoznawania znaków. Możesz myśleć o inżynierii obiektów jako o kolejnym kroku, w którym przekształcasz dane w taki sposób, aby uzyskać sensfunkcje, dzięki czemu algorytm ma jeszcze mniej do rozwiązania. Aby dać analogię, to tak, jakbyś chciał przeczytać książkę w języku obcym, więc najpierw musisz nauczyć się języka, a nie przeczytać go przetłumaczonego na język, który rozumiesz.

W przykładzie danych Titanic Twój algorytm musiałby dowiedzieć się, że sumowanie członków rodziny ma sens, aby uzyskać funkcję „wielkości rodziny” (tak, personalizuję ją tutaj). Jest to oczywista cecha dla człowieka, ale nie jest oczywiste, jeśli widzisz dane jako tylko niektóre kolumny liczb. Jeśli nie wiesz, które kolumny mają znaczenie, gdy rozważymy je razem z innymi kolumnami, algorytm może to ustalić, wypróbowując każdą możliwą kombinację takich kolumn. Jasne, mamy sprytne sposoby na zrobienie tego, ale o wiele łatwiej jest, jeśli informacje są przekazywane algorytmowi od razu.

Tim
źródło
Dziękuję, jest to bardzo dobrze wyjaśnione i bardzo interesujące!
Matthieu Veron
Uważam twoją odpowiedź za bardzo dobrą, ale myślę, że lepiej ją trochę zakwalifikować. W szczególności myślę, że inżynieria cech pod względem warunków interakcji nie upraszcza rzeczy tak bardzo w przypadku algorytmów takich jak RF (chociaż może to nadal pomóc), ponieważ RF same przechwytują warunki interakcji w pewnym stopniu. Daj mi znać, jeśli coś mi brakuje. Ale tak, ogólnie rzecz biorąc, inżynieria funkcji upraszcza i bardzo pomaga.
Poete Maudit
@PoeteMaudit to prawda, że ​​drzewo decyzyjne (a więc RF) modeluje jedną dużą interakcję, ale jest to pewien rodzaj interakcji, nie każda możliwa interakcja. Co więcej, inżynieria cech to nie tylko interakcje.
Tim
Z pewnością zgadzam się z twoimi punktami. Po pierwsze, że RF modelują pewien rodzaj interakcji (masz na myśli głównie x * y?). Po drugie, ta inżynieria cech z pewnością nie dotyczy tylko interakcji.
Poete Maudit
14

Cóż, jeśli planujesz użyć prostego klasyfikatora liniowego, ma sens generowanie nowych funkcji, które są nieliniową funkcją istniejących, szczególnie jeśli wiedza na temat Twojej domeny wskazuje, że wynikowa funkcja będzie znacząca i pouczająca. Zauważ, że liniowy klasyfikator nie może brać pod uwagę tych złożonych cech, chyba że je wyraźnie podasz.

Idealnie, jeśli użyjesz wystarczająco silnego nieliniowego algorytmu klasyfikacji, powinien on być w stanie stworzyć granicę decyzyjną, która uwzględnia arbitralne nieliniowe transformacje cech wejściowych, jeśli mają one charakter informacyjny dla klasyfikacji. Jednak w praktyce większość nieliniowych klasyfikatorów patrzy tylko na pewien rodzaj transformacji. Na przykład wielomianowe jądro SVM rozważy interakcje wielomianowe między funkcjami, ale być może można uzyskać bardziej pouczającą funkcję poprzez zastosowanie innych rodzajów transformacji ...

Krótko mówiąc, jeśli wiedza w dziedzinie wskazuje, że ręcznie opracowana nieliniowa kombinacja funkcji może być informacyjna, warto dodać ją do istniejącego zestawu funkcji.

Daniel López
źródło
Dobrze, rozumiem ! Ale skąd mam wiedzieć, czy moje funkcje, które stworzyłem, są znaczące i zawierają informacje? Mam na myśli, że problemy mogą mieć sprzeczne z intuicją wyjaśnienia. Z tego, co rozumiem, tworzenie funkcji jest sposobem sterowania algorytmem w jednym kierunku, aby zaoszczędzić czas na jego przewidywaniach. Na kilka sposobów wpływamy na algorytm. Jak sprawdzić, czy wpływamy poprawnie?
Matthieu Veron
2
Cóż, to jest miejsce, w którym pojawia się wiedza domena. Na przykład, jeśli projektujesz system diagnozy medycznej, możesz porozmawiać z lekarzami i zapytać ich, jakie informacje wykorzystują do diagnozowania pacjenta. Na przykład, jeśli jeden lekarz powie „Jeśli pacjent ma zarówno gorączkę, jak i bóle głowy, prawdopodobnie zachoruje na grypę”. To zdanie może wskazywać, że włączenie nowej cechy flagi, która wskazuje na obecność zarówno gorączki, jak i bólów głowy, może być dobrym pomysłem (szczególnie jeśli używasz klasyfikatora liniowego, który sam nie „widzi” cech interakcji wielomianowych).
Daniel López
1
Niemniej jednak jest to bardziej sztuka niż nauka. Na koniec musisz sprawdzić skuteczność ręcznie wykonanych funkcji, testując swoje modele na zestawie testowym z bezstronnym protokołem eksperymentalnym ...
Daniel López
3

To prawda, że ​​niektóre modele uczenia maszynowego mają zdolność radzenia sobie z nieliniowością i interakcją między zmiennymi, jednak zależy to od sytuacji, widzę trzy powody, dla których staje się to konieczne.

  1. Y=1

Granica koła

x1x2)y=x0+do1x1+do2)x2)y=x0+do1x12)+do2)x2)2).

  1. Jeśli wiesz z góry, że niektóre funkcje (z wiedzy biznesowej lub doświadczenia), mogą pomóc w ich tworzeniu w celu przyspieszenia czasu wykonywania modelu i ułatwienia dla twojego modelu. Na przykład w twoim przykładzie danych Titanic i jeśli używasz modelu klasyfikacji drzewa decyzyjnego. Jeśli wiesz, że starsze kobiety (wiek i płeć) mają większe szanse na przeżycie, tworząc jedną funkcję, która przechwytuje informacje, twoje drzewo może dokonać jednego podziału na nową zmienną zamiast dwóch podziału na dwie zmienne. Może to przyspieszyć czas obliczeń, jeśli wiesz z góry, że funkcja jest znacząca.

  2. W prawdziwym świecie nie dostaniesz ani jednego zestawu danych, jaki zapewnia Kaggle. Zamiast tego otrzymujesz informacje z całego miejsca. Na przykład, jeśli chcesz przewidzieć osłabienie klienta dla internetowej firmy detalicznej, takiej jak Amazon, masz informacje demograficzne klienta, informacje o transakcji zakupu. Musisz wygenerować wiele funkcji z różnych źródeł, w tym przypadku znajdziesz wiele przydatnych funkcji, które można uzyskać / zagregować z poziomu transakcji. Jak to ujął Andrew Ng: Często umiejętność wykonania funkcji określa sukces lub porażkę projektu uczenia maszynowego.

Anthony Lei
źródło