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()
i transform()
. Być może znasz niektóre narzędzia do wstępnego przetwarzania sklearn, takie jak TfidfVectorizer
i Binarizer
. 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()
i predict()
. 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 implementuje predict()
, ale zdecydowanie implementuje fit()
). 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.
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
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łania fit()
binarizera nie ma pojęcia, jak wyglądają dane, więc wywołanie transform()
nie miałoby sensu. Dzieje się tak, jeśli wydrukujesz listę klas przed próbą dopasowania danych.
print bin.classes_
Podczas próby pojawia się następujący błąd:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Ale kiedy zmieścisz binarizer na vec
liście:
bin.fit(vec)
i spróbuj ponownie
print bin.classes_
Otrzymuję następujące informacje:
['cat' 'dog']
print bin.transform(vec)
A teraz, po wywołaniu transformacji na vec
obiekcie, otrzymujemy:
[[0]
[1]
[1]
[1]]
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łujesz transform()
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.