Próbuję rozwiązać zadanie regresji. Dowiedziałem się, że 3 modele działają dobrze dla różnych podzbiorów danych: LassoLARS, SVR i Gradient Tree Boosting. Zauważyłem, że kiedy robię prognozy na podstawie tych wszystkich 3 modeli, a następnie tworzę tabelę „rzeczywistych wyników” i wyników moich 3 modeli, widzę, że za każdym razem przynajmniej jeden z modeli jest naprawdę bliski rzeczywistej mocy wyjściowej, chociaż 2 inne może być stosunkowo daleko.
Kiedy obliczam minimalny możliwy błąd (jeśli we wszystkich przykładach testowych przewiduję „najlepszy” predyktor), otrzymuję błąd, który jest znacznie mniejszy niż błąd dowolnego modelu. Pomyślałem więc o próbie połączenia prognoz z tych 3 różnych modeli w coś w rodzaju zestawu. Pytanie brzmi, jak to zrobić poprawnie? Wszystkie moje 3 modele są budowane i dostrajane przy użyciu scikit-learn. Czy zapewnia to jakąś metodę, która mogłaby zostać użyta do spakowania modeli w zespół? Problem polega na tym, że nie chcę tylko uśredniać prognoz ze wszystkich trzech modeli, chcę to zrobić z ważeniem, gdzie ważenie powinno być określane na podstawie właściwości konkretnego przykładu.
Nawet jeśli scikit-learn nie zapewnia takiej funkcjonalności, byłoby miło, gdyby ktoś wiedział, jak rozwiązać ten problem - obliczyć wagę każdego modelu dla każdego przykładu w danych. Myślę, że może to być zrobione przez osobny regresor zbudowany na wszystkich tych 3 modelach, który spróbuje uzyskać optymalne wagi dla każdego z 3 modeli, ale nie jestem pewien, czy jest to najlepszy sposób na zrobienie tego.
źródło
model.named_steps['lin_regr'].coef_
) da ci pewien wgląd w to, jak bardzo każdy model w zespole przyczynia się do ostatecznego rozwiązania.X, y = make_regression(n_features=10, n_targets=1)
, daje to błąd wymiaru. czy ktoś może wyjaśnić, co robić?Ok, po spędzeniu czasu na googlowaniu dowiedziałem się, jak mogę wyważać w pythonie, nawet przy scikit-learn. Rozważ poniższe:
Trenuję zestaw moich modeli regresji (jak wspomniano SVR, LassoLars i GradientBoostingRegressor). Następnie uruchamiam je wszystkie na danych treningowych (te same dane, które zostały wykorzystane do szkolenia każdego z tych 3 regresorów). Otrzymuję prognozy dla przykładów z każdym z moich algorytmów i zapisuję te 3 wyniki w ramce danych pandy z kolumnami „przewidywana SVR”, „przewidywana LASSO” i „przewidywana GBR”. I dodaję ostatnią kolumnę do tego analizatora danych, który nazywam „przewidywanym”, który jest prawdziwą wartością predykcyjną.
Następnie trenuję regresję liniową na tej nowej ramce danych:
Więc kiedy chcę przewidzieć nowy przykład, po prostu uruchamiam każdy z moich 3 regresorów osobno, a następnie:
na wyjściach moich 3 regresorów. I uzyskaj wynik.
Problem polega na tym, że znajduję optymalne wagi dla regresorów średnio, wagi będą takie same dla każdego przykładu, na którym spróbuję dokonać prognozy.
Jeśli ktoś ma jakieś pomysły na temat układania w stosy (ważenia) przy użyciu funkcji z obecnego przykładu, dobrze byłoby je usłyszeć.
źródło
LinearRegression()
zamiastLogisticRegression()
modelu?Jeśli twoje dane mają oczywiste podzbiory, możesz uruchomić algorytm klastrowania, taki jak k-średnich, a następnie powiązać każdy klasyfikator z klastrami, na których działa on dobrze. Kiedy pojawi się nowy punkt danych, określ, w którym klastrze się znajduje, i uruchom powiązany klasyfikator.
Możesz również użyć odwrotnych odległości od centroidów, aby uzyskać zestaw wag dla każdego klasyfikatora i przewidzieć za pomocą liniowej kombinacji wszystkich klasyfikatorów.
źródło
Dokonuję pewnego rodzaju ważenia, wykonując następujące czynności, gdy wszystkie modele zostaną w pełni wyszkolone i osiągną dobre wyniki:
Możesz dalej dostroić swój zespół, mierząc procent poprawności przez pewien czas. Po uzyskaniu znacznie dużego, nowego zestawu danych można wykreślić próg w krokach co 0,1, w porównaniu z procentem poprawnym, jeśli użyjesz tego progu do oceny, aby zorientować się, jaki próg da ci, powiedzmy, 95% poprawność dla klasy 1 i tak dalej. Możesz aktualizować zestaw testowy i wyniki F1 w miarę pojawiania się nowych danych i śledzić dryf, odbudowując modele, gdy spadną progi lub dokładność.
źródło