Nie wiem, jak to sklearn.pipeline.Pipeline
dokładnie działa.
W dokumencie znajduje się kilka wyjaśnień . Na przykład co oznaczają przez:
Potok przekształceń z estymatorem końcowym.
Aby wyjaśnić moje pytanie, co to jest steps
? Jak oni pracują?
Edytować
Dzięki odpowiedziom mogę wyjaśnić moje pytanie:
Kiedy wywołuję pipeline i przechodzę, jako kroki, dwa transformatory i jeden estymator, np:
pipln = Pipeline([("trsfm1",transformer_1),
("trsfm2",transformer_2),
("estmtr",estimator)])
Co się stanie, kiedy to zadzwonię?
pipln.fit()
OR
pipln.fit_transform()
Nie mogę zrozumieć, jak estymator może być transformatorem i jak można go zamontować.
python
machine-learning
scikit-learn
neuraxle
farhawa
źródło
źródło
Odpowiedzi:
Transformer w scikit-learn - jakaś klasa, która ma metodę fit and transform lub metodę fit_transform.
Predictor - klasa, która ma metody dopasowywania i przewidywania lub metoda fit_predict.
Pipeline to tylko abstrakcyjne pojęcie, nie jest to jakiś istniejący algorytm ML. Często w zadaniach ML trzeba wykonać sekwencję różnych transformacji (znaleźć zestaw cech, wygenerować nowe cechy, wybrać tylko niektóre dobre cechy) surowego zbioru danych przed zastosowaniem ostatecznego estymatora.
Oto dobry przykład użycia rurociągu. Pipeline zapewnia jeden interfejs dla wszystkich 3 etapów transformacji i estymatora wynikowego. Hermetyzuje wewnątrz transformatory i predyktory, a teraz możesz zrobić coś takiego:
Tylko z:
Dzięki potokom można łatwo przeprowadzić wyszukiwanie w siatce zestawu parametrów dla każdego kroku tego meta-estymatora. Jak opisano w linku powyżej. Wszystkie kroki z wyjątkiem ostatniego muszą być transformacjami, ostatni krok może być transformatorem lub predyktorem. Odpowiedź do edycji : Kiedy zadzwonisz
pipln.fit()
- każdy transformator wewnątrz rurociągu zostanie zamontowany na wyjściach poprzedniego transformatora (pierwszy transformator jest uczony na surowym zestawie danych). Ostatnim estymatorem może być transformator lub predyktor, możesz wywołać fit_transform () na potoku tylko wtedy, gdy ostatnim estymatorem jest transformer (który implementuje metody fit_transform lub transform and fit oddzielnie), możesz wywołać fit_predict () lub Predict () na potoku tylko wtedy, gdy Twoim ostatnim estymatorem jest predyktor. Więc po prostu nie możesz wywołać fit_transform ani transformacji na potoku, którego ostatnim krokiem jest predyktor.źródło
predicted = pipeline.fit(Xtrain).predict(Xtrain)
?Myślę, że M0rkHaV ma dobry pomysł. Scikit-learn za klasa rurociągu jest użytecznym narzędziem do enkapsulacji wielu różnych transformatorów wraz estymatora do jednego obiektu, tak że trzeba tylko zadzwonić ważnych metod Once (
fit()
,predict()
itp). Podzielmy dwa główne komponenty:Transformatory to klasy, które implementują zarówno
fit()
itransform()
. Być może znasz niektóre narzędzia do wstępnego przetwarzania sklearn, takie jakTfidfVectorizer
iBinarizer
. Jeśli spojrzysz na dokumentację tych narzędzi do wstępnego przetwarzania, zobaczysz, że implementują one obie te metody. To, co uważam za całkiem fajne, to fakt, że niektóre estymatory mogą być również używane jako kroki transformacji, np.LinearSVC
!Estymatory to klasy, które implementują zarówno
fit()
ipredict()
. Przekonasz się, że wiele klasyfikatorów i modeli regresji implementuje obie te metody, dzięki czemu możesz łatwo przetestować wiele różnych modeli. Możliwe jest użycie innego transformatora jako ostatecznego estymatora (tj. Niekoniecznie implementujepredict()
, ale zdecydowanie implementujefit()
). Wszystko to oznacza, że nie byłbyś w stanie zadzwonićpredict()
.Jeśli chodzi o twoją edycję: przejdźmy przez przykład tekstowy. Korzystając z LabelBinarizer, chcemy zmienić listę etykiet w listę wartości binarnych.
Teraz, gdy binarizer jest dopasowany do pewnych danych, będzie miał strukturę o nazwie,
classes_
która zawiera unikalne klasy, o których „wie” transformator. Bez wywołaniafit()
binarizera nie ma pojęcia, jak wyglądają dane, więc wywołanietransform()
nie miałoby sensu. Dzieje się tak, jeśli wydrukujesz listę klas przed próbą dopasowania danych.Podczas próby pojawia się następujący błąd:
Ale kiedy zmieścisz binarizer na
vec
liście:i spróbuj ponownie
Otrzymuję następujące informacje:
A teraz, po wywołaniu transformacji na
vec
obiekcie, otrzymujemy:Jeśli chodzi o estymatory używane jako transformatory, użyjmy
DecisionTree
klasyfikatora jako przykładu ekstraktora cech. Drzewa decyzyjne są świetne z wielu powodów, ale dla naszych celów ważne jest to, że mają one możliwość rangowania cech, które drzewo uznało za przydatne do przewidywania. Kiedy wywołujesztransform()
drzewo decyzyjne, pobierze ono twoje dane wejściowe i znajdzie to , co uważa za najważniejsze funkcje. Możesz więc pomyśleć o przekształceniu macierzy danych (n wierszy na m kolumn) w mniejszą macierz (n wierszy na k kolumn), gdzie k kolumn to k najważniejszych cech znalezionych przez Drzewo decyzyjne.źródło
fit()
itransform()
jest Transformers? , jak estymatory mogą być używane jako transformatory?fit()
to metoda, którą wywołujesz, aby dopasować lub „wytrenować” swój transformator, tak jak w przypadku modelu klasyfikatora lub modelu regresji. Jeśli chodzi otransform()
, jest to metoda, którą wywołujesz, aby faktycznie przekształcić dane wejściowe w dane wyjściowe. Na przykład wywołanieBinarizer.transform([8,2,2])
(po dopasowaniu!) Może spowodować[[1,0],[0,1],[0,1]]
. Jeśli chodzi o używanie estymatorów jako transformatorów, zredaguję krótki przykład w mojej odpowiedzi.Co to są potoki ML i jak działają?
Potok to seria kroków, w których dane są przekształcane. Pochodzi ze starego wzorca projektowego „potok i filtr” (na przykład można pomyśleć o poleceniach unix bash z potokami „|” lub operatorach przekierowania „>”). Jednak potoki są obiektami w kodzie. W związku z tym możesz mieć klasę dla każdego filtru (inaczej każdy krok potoku), a następnie inną klasę, aby połączyć te kroki w ostateczny potok. Niektóre potoki mogą łączyć inne potoki szeregowo lub równolegle, mieć wiele wejść lub wyjść i tak dalej. Lubimy postrzegać potoki uczenia maszynowego jako:
Metody rurociągu Scikit-Learn
Rurociągi (lub stopnie w rurociągu) muszą mieć te dwie metody :
Możliwe jest również wywołanie tej metody w celu połączenia obu:
Problemy klasy sklearn.pipeline.Pipeline
Scikit-Learn wydało swoje pierwsze wydanie w 2007 roku, czyli w erze przed głębokim uczeniem się . Jest to jednak jedna z najbardziej znanych i przyjętych bibliotek uczenia maszynowego i wciąż się rozwija. Ponadto wykorzystuje wzorzec projektowy Pipe and Filter jako styl architektoniczny oprogramowania - to właśnie sprawia, że Scikit-Learn jest tak fantastyczny, a ponadto zapewnia algorytmy gotowe do użycia. Ma jednak ogromne problemy, jeśli chodzi o wykonanie następujących czynności, które powinniśmy być w stanie zrobić już w 2020 roku:
Rozwiązania, które znaleźliśmy dla tych problemów Scikit-Learn
Z pewnością Scikit-Learn jest bardzo wygodny i dobrze zbudowany. Jednak wymaga odświeżenia. Oto nasze rozwiązania z Neuraxle, dzięki którym Scikit-Learn jest świeży i przydatny w nowoczesnych projektach komputerowych!
Dodatkowe metody i funkcje potoku oferowane przez Neuraxle
Uwaga: jeśli krok potoku nie musi mieć jednej z metod dopasowania lub transformacji, może dziedziczyć po NonFittableMixin lub NonTransformableMixin, aby zapewnić domyślną implementację jednej z tych metod, aby nic nie robić.
Na początek możliwe jest, aby rurociągi lub ich stopnie opcjonalnie zdefiniowały również te metody :
Do Następujące metody są domyślnie w celu umożliwienia zarządzania hiperparametrów:
RandInt(1, 3)
co oznacza od 1 do 3 warstw. Możesz wywołać.rvs()
ten dykt, aby wybrać losowo wartość i wysłać ją do „set_hyperparams”, aby spróbować ją przetrenować.Aby uzyskać więcej informacji na temat naszych sugerowanych rozwiązań, przeczytaj wpisy na dużej liście z linkami powyżej.
źródło