Python-czym dokładnie jest sklearn.rurociąg.Rurociąg?

Nie wiem, jak dokładnie działa.

Jest kilka wyjaśnień w doc . Na przykład co oznaczają przez:

Rurociąg przekształceń z estymatorem końcowym.

Aby wyjaśnić moje pytanie, Czym są steps? Jak działają?

Edit

Dzięki odpowiedziom mogę wyjaśnić moje pytanie:

Kiedy wywołuję rurociąg i przechodzę, jako kroki, dwa transformatory i jeden Estymator, e. g:

pipln = Pipeline([("trsfm1",transformer_1),
                  ("trsfm2",transformer_2),
                  ("estmtr",estimator)])
Co się stanie, gdy to zadzwonię?
pipln.fit()
OR
pipln.fit_transform()
Nie mogę zrozumieć, jak Estymator może być transformatorem i jak można go zamontować.
Author: DavidG, 2015-10-12

3 answers

Transformer w scikit-learn-jakiejś klasie, która ma metodę fit i transform, lub metodę fit_transform.

Predictor - Klasa posiadająca metody fit I predict lub metodę fit_predict.

Pipeline jest tylko abstrakcyjnym pojęciem, nie jest jakimś istniejącym algorytmem ml. Często w zadaniach ML trzeba wykonać sekwencję różnych przekształceń (znaleźć zestaw funkcji, wygenerować nowe funkcje, wybrać tylko kilka dobrych funkcji) zbioru danych surowych przed zastosowanie estymatora końcowego.

Tutaj jest dobrym przykładem użycia potoków. Pipeline zapewnia jeden interfejs dla wszystkich 3 etapów transformacji i wynikowego estymatora. Zawiera transformatory i predykatory w środku, a teraz możesz zrobić coś w stylu:]}

    vect = CountVectorizer()
    tfidf = TfidfTransformer()
    clf = SGDClassifier()

    vX = vect.fit_transform(Xtrain)
    tfidfX = tfidf.fit_transform(vX)
    predicted = clf.fit_predict(tfidfX)

    # Now evaluate all steps on test set
    vX = vect.fit_transform(Xtest)
    tfidfX = tfidf.fit_transform(vX)
    predicted = clf.fit_predict(tfidfX)

Z just:

pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', SGDClassifier()),
])
predicted = pipeline.fit(Xtrain).predict(Xtrain)
# Now evaluate all steps on test set
predicted = pipeline.predict(Xtest)

Za pomocą rurociągów można łatwo przeprowadzić przeszukiwanie siatki nad zestawem parametrów dla każdego kroku tego meta-estymatora. Jak opisano w linku powyżej. Wszystkie kroki oprócz ostatniego muszą być transformatami, ostatnim krokiem może być transformator lub predyktor. odpowiedź do edycji : Po wywołaniu pipln.fit() - każdy transformator wewnątrz rurociągu będzie zamontowany na wyjściach poprzedniego transformatora (pierwszy transformator jest poznany na surowym zbiorze danych). Ostatnim estymatorem może być transformer lub predictor, możesz wywołać fit_transform () na potoku tylko jeśli twój ostatni Estymator to transformer (który implementuje metody fit_transform lub transform i fit oddzielnie), możesz wywołać fit_predict () lub predict () na potoku tylko wtedy, gdy ostatnim estymatorem jest predyktor. Nie można więc wywołać fit_transform ani transform w potoku, którego ostatnim krokiem jest predictor.

 198
Author: Ibraim Ganiev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 23:31:15

Myślę, że M0rkHaV ma dobry pomysł. Klasa pipeline Scikit-learn jest użytecznym narzędziem do hermetyzacji wielu różnych transformatorów wraz z estymatorem w jeden obiekt, dzięki czemu musisz wywołać swoje ważne metody tylko raz (fit(), predict(), itp.). Podzielmy dwa główne składniki:

  1. Transformatory {[32] } są klasami, które implementują zarówno fit(), jak i transform(). Możesz być zaznajomiony z niektórymi narzędziami do wstępnego przetwarzania sklearn, takimi jak TfidfVectorizer i Binarizer. Jeśli spojrzysz na dokumenty tych narzędzi do wstępnego przetwarzania, zobaczysz, że implementują one obie te metody. To, co uważam za całkiem fajne, to to, że niektóre estymatory mogą być również używane jako etapy transformacji, np. LinearSVC!

  2. Estymatory {[32] } są klasami, które implementują zarówno fit(), jak i predict(). Przekonasz się, że wiele klasyfikatorów i modeli regresji implementuje obie te metody i jako takie możesz łatwo przetestować wiele różnych modeli. Możliwe jest użycie innego transformator jako ostateczny Estymator (tzn. niekoniecznie implementuje predict(), ale zdecydowanie implementuje fit()). Wszystko to oznacza, że nie będziesz w stanie zadzwonić predict().

Co do Twojej edycji: przejdźmy do przykładu opartego na tekście. Używając LabelBinarizer, chcemy przekształcić listę etykiet w listę wartości binarnych.

bin = LabelBinarizer()  #first we initialize

vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized

Teraz, gdy binaryzator jest zamontowany na niektórych danych, będzie miał strukturę o nazwie classes_, która zawiera unikalne klasy, które transformer 'wie' o Bez wywołania fit() binaryzator nie ma pojęcia, jak wyglądają dane, więc wywołanie transform() nie miałoby żadnego sensu. Jest to prawdą, jeśli wydrukujesz listę klas przed próbą dopasowania danych.

print bin.classes_  

Podczas próby tego dostaję następujący błąd:

AttributeError: 'LabelBinarizer' object has no attribute 'classes_'

Ale kiedy zmieścisz binaryzator na liście vec:

bin.fit(vec)

I spróbuj jeszcze raz

print bin.classes_

Dostaję:

['cat' 'dog']


print bin.transform(vec)

A teraz, po wywołaniu transform na vec obiekt, otrzymujemy:

[[0]
 [1]
 [1]
 [1]]

Jeśli chodzi o estymatory używane jako transformatory, użyjmy klasyfikatora DecisionTree jako przykład ekstraktora funkcji. Drzewa decyzyjne są świetne z wielu powodów, ale dla naszych celów, ważne jest to, że mają zdolność oceniania cech, które drzewo {31]} {32]} uznało za przydatne do przewidywania. Kiedy wywołasz transform() na drzewie decyzyjnym, pobierze Twoje dane wejściowe i znajdzie to, co uważa za najważniejsze funkcje. Można więc pomyśleć o przekształceniu macierzy danych (n wierszy przez kolumny m) w mniejszą macierz( n wierszy przez kolumny k), gdzie kolumny k są najważniejszymi cechami K, które znalazło drzewo decyzyjne.

 21
Author: NBartley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-14 02:23:53

Algorytmy ML zazwyczaj przetwarzają dane tabelaryczne. Możesz chcieć wykonać wstępne przetwarzanie i przetwarzanie tych danych przed i po algorytmie ML. Rurociąg jest sposobem na łańcuch tych etapów przetwarzania danych.

Czym są ml pipelines i jak działają?

Rurociąg to szereg kroków, w których dane są przekształcane. Pochodzi ze starego wzorca projektowego "pipe and filter" (na przykład, można pomyśleć o Unixowych komendach bash z pipes " / " lub przekierowaniem operatory">"). Jednak potoki są obiektami w kodzie. W ten sposób możesz mieć klasę dla każdego filtra (aka każdy krok potoku), a następnie inną klasę, która połączy te kroki w końcowy potok. Niektóre rurociągi mogą łączyć inne rurociągi szeregowo lub równolegle, mieć wiele wejść lub wyjść i tak dalej. Lubimy oglądać Pipelining Machine Learning jako:

  • rury i filtry . Kroki rurociągu przetwarzają dane i zarządzają ich stanem wewnętrznym, który można dowiedzieć się z danych.
  • kompozyty . Rurociągi mogą być zagnieżdżane: na przykład cały rurociąg może być traktowany jako pojedynczy krok rurociągu w innym rurociągu. Etap rurociągu niekoniecznie jest rurociągiem, ale sam rurociąg jest przynajmniej etapem rurociągu z definicji.
  • kierowane wykresy acykliczne (DAG) . Wyjście kroku rurociągu może być wysyłane do wielu innych kroków, a następnie wynikowe wyjścia mogą być rekombinowane i tak dalej. Uwaga: pomimo rurociągów są acykliczne, mogą przetwarzać wiele elementów jeden po drugim, a jeśli ich stan zmienia się (np. za każdym razem używając metody fit_transform), to mogą być postrzegane jako powtarzające się w czasie, zachowując swoje stany (myśl jak RNN). Jest to ciekawy sposób, aby zobaczyć rurociągi do prowadzenia nauki online podczas wprowadzania ich do produkcji i szkolenia ich na większej ilości danych.

Metody Scikit - learn Pipeline

Rurociągi (lub stopnie w rurociągu) muszą mieć te dwa metody :

Możliwe jest również wywołanie tej metody do łańcucha zarówno:

  • "fit_transform " dopasować, a następnie przekształcić dane, ale w jednym przejściu, co pozwala na potencjalną optymalizację kodu, gdy obie metody muszą być robione jeden po drugim bezpośrednio.

Problemy sklearn.rurociąg.Klasa rurociągu

Wzór projektu Scikit-Learn "pipe and filter" jest po prostu piękny. Ale jak go używać do głębokiego uczenia, AutoML i złożonych potoków na poziomie produkcji?

Scikit-Learn miał swoją pierwszą premierę w 2007 roku, która była erą głębokiego uczenia [61]}. Jest to jednak jedna z najbardziej znanych i przyjętych bibliotek uczenia maszynowego i wciąż się rozwija. On top of all, używa wzorca projektowania rur i filtrów jako stylu architektonicznego oprogramowania - to sprawia, że Scikit-Learn jest tak fantastyczny, dodając do tego, że dostarcza algorytmy gotowe do użycia. Jednak ma ogromne problemy, jeśli chodzi o następujące działania, które powinniśmy być w stanie zrobić już w 2020 roku: {]}
  • Automatyczne Uczenie Maszynowe (AutoML),
  • Deep Learning Pipelines,
  • bardziej złożone Uczenie maszynowe rurociągi.

Rozwiązania, które znaleźliśmy dla tych problemów Scikit-Learn

Na pewno Scikit-Learn jest bardzo wygodny i dobrze zbudowany. Wymaga jednak odświeżenia. Oto nasze rozwiązania z Neuraxle , aby Scikit-Learn był świeży i użyteczny w nowoczesnych projektach komputerowych!

Dodatkowe metody rurociągów i funkcje oferowane przez Neuraxle

Uwaga: Jeśli etap rurociągu nie musi mieć jednej z metod fit lub transform, może inherit from NonFittableMixin or NonTransformableMixin to be provided Domyślna implementacja jednej z tych metod, aby nic nie robić.

Jako rozrusznik można również opcjonalnie zdefiniować te metody :

  • "setup ", która wywoła metodę "setup" na każdym kroku. Na przykład, jeśli krok zawiera sieć neuronową TensorFlow, PyTorch lub Keras, kroki mogą tworzyć wykresy neuronowe i zarejestrować je do GPU w metodzie "setup" przed dopasowaniem. Nie zaleca się tworzenia wykresów bezpośrednio w konstruktorach kroków z kilku powodów, na przykład jeśli kroki są kopiowane przed uruchomieniem wiele razy z różnymi hiperparametrami w ramach algorytmu automatycznego uczenia maszynowego, który wyszukuje najlepsze hiperparametry dla Ciebie.
  • "teardown", która jest przeciwieństwem metody "setup": czyści zasoby.

The following metody są dostarczane domyślnie , aby umożliwić zarządzanie hiperparametrami:

  • "get_hyperparams " zwróci ci słownik hiperparametrów. Jeśli rurociąg zawiera więcej rurociągów (rurociągów zagnieżdżonych), wtedy klucze hiperparametru są połączone łańcuchami z podwójnymi znakami podkreślenia separatorami"__".
  • "set_hyperparams " pozwoli Ci ustawić nowe hiperparametry w tym samym formacie, kiedy je otrzymasz.
  • "get_hyperparams_space " pozwala uzyskać przestrzeń hiperparametru, która nie będzie pusta, jeśli ją zdefiniujesz. Tak więc, jedyną różnicą z "get_hyperparams" tutaj jest to, że otrzymasz rozkłady statystyczne jako wartości zamiast dokładnej wartości. Na przykład, jeden hiperparametr dla liczby warstw może być RandInt(1, 3), co oznacza od 1 do 3 warstw. Możesz wywołać .rvs() na tym dict, aby wybrać wartość losowo i wysłać ją do "set_hyperparams", aby spróbować na niej trenować.
  • "set_hyperparams_space " można użyć aby ustawić nową przestrzeń przy użyciu tych samych klas rozkładu hiperparametrów jak w "get_hyperparams_space".

Aby uzyskać więcej informacji na temat proponowanych przez nas rozwiązań, przeczytaj wpisy na dużej liście z linkami powyżej.

 9
Author: Guillaume Chevalier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-22 05:28:37