Penso che M0rkHaV abbia l'idea giusta. Scikit-learn della classe gasdotto è uno strumento utile per incapsulare più trasformatori diversi a fianco di un estimatore in un unico oggetto, in modo da avere solo per chiamare i tuoi metodi importanti una volta ( fit(), predict(), ecc). Analizziamo le due componenti principali:
I trasformatori sono classi che implementano sia fit()e transform(). Potresti avere familiarità con alcuni degli strumenti di preelaborazione sklearn, come TfidfVectorizere Binarizer. Se guardi la documentazione di questi strumenti di preelaborazione, vedrai che implementano entrambi questi metodi. Quello che trovo piuttosto interessante è che alcuni stimatori possono essere utilizzati anche come passaggi di trasformazione, ad esempio LinearSVC!
Gli stimatori sono classi che implementano sia fit()e predict(). Scoprirai che molti dei classificatori e dei modelli di regressione implementano entrambi questi metodi e come tali puoi testare prontamente molti modelli diversi. È possibile utilizzare un altro trasformatore come stimatore finale (cioè, non necessariamente implementa predict(), ma sicuramente implementa fit()). Tutto ciò significa che non saresti in grado di chiamare predict().
Per quanto riguarda la tua modifica: esaminiamo un esempio basato su testo. Utilizzando LabelBinarizer, vogliamo trasformare un elenco di etichette in un elenco di valori binari.
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
Ora, quando il binarizzatore viene adattato su alcuni dati, avrà una struttura chiamata classes_che contiene le classi uniche di cui il trasformatore "conosce". Senza chiamare fit()il binarizzatore non ha idea di come siano i dati, quindi chiamare transform()non avrebbe alcun senso. Questo è vero se si stampa l'elenco delle classi prima di provare ad adattare i dati.
print bin.classes_
Ottengo il seguente errore quando provo questo:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Ma quando inserisci il binarizzatore vecnell'elenco:
bin.fit(vec)
e prova ancora
print bin.classes_
Ottengo quanto segue:
['cat' 'dog']
print bin.transform(vec)
E ora, dopo aver chiamato la trasformazione vecsull'oggetto, otteniamo quanto segue:
[[0]
[1]
[1]
[1]]
Per quanto riguarda gli stimatori usati come trasformatori, usiamo il DecisionTreeclassificatore come esempio di un estrattore di caratteristiche. Gli alberi decisionali sono ottimi per molte ragioni, ma per i nostri scopi, ciò che è importante è che abbiano la capacità di classificare le caratteristiche che l' albero ha trovato utili per la previsione. Quando si richiama transform()un albero decisionale, esso prenderà i dati di input e troverà quelle che ritiene siano le caratteristiche più importanti. Quindi puoi pensare di trasformare la tua matrice di dati (n righe per m colonne) in una matrice più piccola (n righe per k colonne), dove le k colonne sono le k caratteristiche più importanti trovate dall'albero decisionale.