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?
machine-learning
feature-engineering
Matthieu Veron
źródło
źródło
Odpowiedzi:
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!x y z= x y z> 0
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.
źródło
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.
źródło
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.
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.
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.
źródło