Ostatnio dowiedziałem się, że jednym ze sposobów znajdowania lepszych rozwiązań problemów ML jest tworzenie funkcji. Można to zrobić, na przykład sumując dwie funkcje.
Na przykład, mamy dwie cechy: „atak” i „obrona” jakiegoś bohatera. Następnie tworzymy dodatkową funkcję o nazwie „total”, która jest sumą „ataku” i „obrony”. Teraz wydaje mi się dziwne, że nawet trudny „atak” i „obrona” są prawie idealnie skorelowane z „całkowitą”, wciąż zdobywamy przydatne informacje.
Jaka jest matematyka? Czy może moje rozumowanie jest błędne?
Ponadto, czy nie jest to problemem dla klasyfikatorów takich jak kNN, że „suma” będzie zawsze większa niż „atak” lub „obrona”? Zatem nawet po standaryzacji będziemy mieć funkcje zawierające wartości z różnych zakresów?
machine-learning
feature-construction
MrKadek750
źródło
źródło
Odpowiedzi:
Pytasz o tytuł, a treść wydaje mi się niezgodna. Jeśli używasz modelu liniowego, dodaj do ataku dodatkową cechę, a obrona pogorszy sytuację.
Najpierw chciałbym odpowiedzieć na pytanie, dlaczego ogólnie rzecz biorąc działa funkcja.
Obraz jest wart tysiąca słów. Ta liczba może dać ci pewne spostrzeżenia na temat inżynierii funkcji i dlaczego ona działa ( źródło obrazu ):
Dane we współrzędnych kartezjańskich są bardziej skomplikowane i stosunkowo trudno jest napisać regułę / zbudować model klasyfikujący dwa typy.
Dane we współrzędnych biegunowych są bardzo łatwe: możemy napisać prostą regułę na aby sklasyfikować dwa typy.r
To mówi nam, że reprezentacja danych ma duże znaczenie. W niektórych miejscach wykonywanie zadań jest znacznie łatwiejsze niż w innych miejscach.
Tutaj odpowiadam na pytanie wymienione w twoim przykładzie (łącznie na atak i obronę)
W rzeczywistości inżynieria cech wymieniona w tym przykładzie ataku i obrony nie będzie działać dobrze w przypadku wielu modeli, takich jak model liniowy i spowoduje pewne problemy. Zobacz wielokoliniowość . Z drugiej strony taka inżynieria funkcji może działać na innych modelach, takich jak drzewo decyzyjne / losowy las. Szczegóły znajdują się w odpowiedzi @ Imran.
Tak więc odpowiedź jest taka, że w zależności od używanego modelu, niektóre funkcje inżynierii pomogą w niektórych modelach, ale nie w przypadku innych modeli.
źródło
Rodzaj używanego przez nas modelu może nie być bardzo wydajny w uczeniu się pewnych kombinacji istniejących funkcji.
Rozważmy na przykład twój przykład, gdzie są funkcje0 a + d< 0 1 a + d≥ 0
a
id
, a my używamy drzewa decyzyjnego, aby przewidzieć wynik binarny, który będzie jeśli i jeśli .Ponieważ drzewa decyzyjne można podzielić tylko wzdłuż poszczególnych osi elementów, nasz model będzie próbował zbudować schody pasujące do linii, która będzie wyglądać mniej więcej tak:
Jak widać, nie uogólni to idealnie do nowych danych. Możemy mieć kręgi nad prawdziwą linią decyzyjną, które znajdują się poniżej naszej granicy decyzji i odwrotnie w przypadku krzyży.
Jeśli jednak dodamy
a+d
jako funkcję, problem staje się banalny dla drzewa decyzyjnego. Może zignorować osobęa
id
funkcje i rozwiązać problem za pomocą jednegoa+d<0
pnia decyzji.Jeśli jednak użyjesz regresji liniowej, wówczas Twój model będzie w pełni zdolny do uczenia bez dodawania dodatkowej funkcji.a + d
Podsumowując, niektóre dodatkowe funkcje mogą być pomocne w zależności od typu używanego modelu, dlatego należy zachować ostrożność, biorąc pod uwagę zarówno dane, jak i model podczas projektowania funkcji.
źródło
a
id
wystarczyłby i dodająca+d
jako cecha nie zrobi różnicy.total
total
attack
defense
attack
defense
total
attack
total
defense
Jeśli chcesz ujednolicić swoje predyktory, powinieneś to zrobić po ich zbudowaniu.
źródło
[attack, defense, total]
ma oczywiście rangę 2. Mógłbym sobie wyobrazić, że w czymś w rodzaju penalizowanego modelu liniowego mógłby to zmienić, ale jest on oparty na intuicji, a nie w pełni przez nią przepracowany. Można wyjaśnić, dlaczego, jeśliattack
idefense
nie są silnie skorelowane ztotal
(co się dzieje, kiedyattack
idefense
są silnie ujemnie skorelowany), dlategototal
mogą być pomocne?total
nie musi być silnie skorelowana zattack
lubdefense
, ale nigdy nie użyłbyś dwóch predyktorów i ich sumy w tym samym modelu, ze względu na liniowy zależność, z implikuje silną korelację między niektórymi z trzech.Aby dać ogólną odpowiedź, inżynieria funkcji w większości przypadków polega na wyodrębnieniu istotnych danych z danych, więc jeśli podasz więcej informacji swojemu modelowi, to oczywiście powinno działać lepiej. Powiedz, że twoje dane składają się z adresów e-mail w postaci „imię[email protected] kraju”. Jeśli użyjesz ich takimi, jakie są w swoim modelu, każda osoba będzie charakteryzować się unikalnym adresem e-mail, więc nie powie nam to wiele. Powiedziałby nam tylko, że jeden e-mail może należeć do innej osoby niż inny. Dzięki inżynierii funkcji z takich adresów można uzyskać informacje o możliwej płci (imię i nazwisko), pochodzeniu rodzinnym i pochodzeniu etnicznym (nazwisko), narodowości (domenie) i wielu innych - daje to całkiem sporo informacji, prawda?
źródło
Co próbujesz osiągnąć za pomocą swojej „funkcji” ogółem ? Jeśli tylko porównujesz bohaterów, atak i obrona mogą być bardziej przydatne. Jeśli uznasz, że typ kompilacji (jak zorientowany ofensywnie w porównaniu z defensywnym) jest przydatny, być może bardziej przydatny byłby atak / obrona . A może MyAttack - YourDefense jest bardziej przydatny.
To naprawdę zależy od twojego celu i sprowadza się do tego, że wstrzykujesz dodatkową wiedzę do problemu, abyś mógł uzyskać lepsze odpowiedzi. Być może słyszeliście ludzie rzucając wokół zalogować i kwadratu i stosunek i wszelkiego rodzaju sposoby można zrobić funkcje, ale w dolnej linii jest to, że „użyteczne” polega na zadaniu pod ręką i polega na przekształcaniu danych masz w domenie, w której decyzje są prostsze.
źródło