scikit-learn Tutorial
Iniziare con scikit-learn
Ricerca…
Osservazioni
scikit-learn
è una libreria open source generica per l'analisi dei dati scritta in python. È basato su altre librerie python: NumPy, SciPy e matplotlib
scikit-learn
contiene una serie di implementazioni per diversi algoritmi popolari di machine learning.
Installazione di scikit-learn
L'attuale versione stabile di scikit-learn richiede :
- Python (> = 2.6 o> = 3.3),
- NumPy (> = 1.6.1),
- SciPy (> = 0,9).
Per la maggior parte di installazione pip
gestore di pacchetti python può installare python e tutte le sue dipendenze:
pip install scikit-learn
Tuttavia, per i sistemi Linux si consiglia di utilizzare il gestore pacchetti conda
per evitare possibili processi di compilazione
conda install scikit-learn
Per verificare di avere scikit-learn
, esegui in shell:
python -c 'import sklearn; print(sklearn.__version__)'
Installazione di Windows e Mac OSX:
Canopy e Anaconda hanno entrambi una versione recente di scikit-learn , oltre a un ampio set di librerie scientifiche Python per Windows, Mac OSX (anche per Linux).
Addestrare un classificatore con convalida incrociata
Utilizzo del set di dati dell'iride:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
I dati vengono suddivisi in set di treni e test. Per fare ciò utilizziamo la funzione di utilità train_test_split
per dividere a caso sia X
che y
(vettori di dati e di destinazione) con l'opzione train_size=0.75
(i set di allenamento contengono il 75% dei dati).
I set di dati di addestramento vengono inseriti in un classificatore dei vicini più vicino k . Il metodo di fit
del classificatore adatta il modello ai dati.
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75)
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
Infine, prevedendo la qualità del campione di prova:
clf.score(X_test, y_test) # Output: 0.94736842105263153
Utilizzando una coppia di treni e set di test potremmo ottenere una stima parziale della qualità del classificatore a causa della scelta arbitraria della suddivisione dei dati. Utilizzando la convalida incrociata possiamo adattare il classificatore su sottoinsiemi di treni / test diversi e ottenere una media su tutti i risultati di precisione. La funzione cross_val_score
adatta a un classificatore ai dati di input utilizzando la convalida incrociata. Può prendere come input il numero di diverse suddivisioni (pieghe) da utilizzare (5 nell'esempio seguente).
from sklearn.cross_validation import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
# Output: array([ 0.96666667, 0.96666667, 0.93333333, 0.96666667, 1. ])
print "Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() / 2)
# Output: Accuracy: 0.97 (+/- 0.03)
Creazione di pipeline
La ricerca di schemi nei dati spesso procede in una catena di fasi di elaborazione dei dati, ad esempio selezione delle caratteristiche, normalizzazione e classificazione. In sklearn
, viene utilizzata una pipeline di fasi.
Ad esempio, il codice seguente mostra una pipeline composta da due fasi. Il primo ridimensiona le funzioni e il secondo allena un classificatore sul set di dati aumentato risultante:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
Una volta che la pipeline è stata creata, puoi usarla come una fase normale (in base ai passaggi specifici). Qui, ad esempio, la pipeline si comporta come un classificatore. Di conseguenza, possiamo usarlo come segue:
# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
Interfacce e convenzioni
Diverse operazioni con i dati vengono eseguite utilizzando classi speciali.
La maggior parte delle classi appartiene a uno dei seguenti gruppi:
- algoritmi di classificazione (derivati da
sklearn.base.ClassifierMixin
) per risolvere problemi di classificazione - algoritmi di regressione (derivati da
sklearn.base.RegressorMixin
) per risolvere il problema della ricostruzione di variabili continue (problema di regressione) - trasformazioni di dati (derivate da
sklearn.base.TransformerMixin
) che preelaborano i dati
I dati sono memorizzati in numpy.array
s (ma altri oggetti tipo pandas.DataFrame
come pandas.DataFrame
s sono accettati se sono convertibili in numpy.array
s)
Ogni oggetto nei dati è descritto da un insieme di caratteristiche, la convenzione generale è che il campione di dati è rappresentato con un array, dove la prima dimensione è id di esempio di dati, la seconda dimensione è id di caratteristica.
import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)
Output:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
Nel set di dati sklearn
sopra riportato contiene 5 oggetti ciascuno descritto da 2 caratteristiche.
Set di dati di esempio
Per facilità di test, sklearn
fornisce alcuni set di dati sklearn.datasets
nel modulo sklearn.datasets
. Ad esempio, carichiamo il set di dati dell'iride di Fisher:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
Puoi leggere la descrizione completa, i nomi delle funzioni e i nomi delle classi ( target_names
). Quelli sono memorizzati come stringhe.
Siamo interessati ai dati e alle classi, memorizzati in campi data
e target
. Per convenzione quelli sono indicati come X
e y
X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
numpy.unique(y)
array([0, 1, 2])
Le forme di X
e y
dicono che ci sono 150 campioni con 4 caratteristiche. Ogni campione appartiene a una delle seguenti classi: 0, 1 o 2.
X
e y
possono ora essere utilizzati nell'addestramento di un classificatore, chiamando il metodo fit()
del classificatore.
Ecco l'elenco completo dei set di dati forniti dal modulo sklearn.datasets
con le loro dimensioni e destinazione d'uso:
Carica con | Descrizione | Taglia | uso |
---|---|---|---|
load_boston() | Dataset dei prezzi delle case di Boston | 506 | regressione |
load_breast_cancer() | Dataset Wisconsin del cancro al seno | 569 | classificazione (binaria) |
load_diabetes() | Dataset per il diabete | 442 | regressione |
load_digits(n_class) | Set di dati Digits | 1797 | classificazione |
load_iris() | Set di dati Iris | 150 | classificazione (multi-classe) |
load_linnerud() | Set di dati Linnerud | 20 | regressione multivariata |
Nota che (fonte: http://scikit-learn.org/stable/datasets/) :
Questi set di dati sono utili per illustrare rapidamente il comportamento dei vari algoritmi implementati nello scikit. Tuttavia, sono spesso troppo piccoli per essere rappresentativi dei compiti di apprendimento automatico del mondo reale.
Oltre a questi set di dati di esempio giocattolo sklearn.datasets
, sklearn.datasets
fornisce anche funzioni di utilità per il caricamento di set di dati esterni:
-
load_mlcomp
per caricare i dataset di esempio dal repository mlcomp.org (si noti che i set di dati devono essere scaricati prima). Ecco un esempio di utilizzo. -
fetch_lfw_pairs
efetch_lfw_people
per il caricamento del set di datifetch_lfw_people
etichettate in the Wild (LFW) da http://vis-www.cs.umass.edu/lfw/ , utilizzato per la verifica del volto (o del riconoscimento facciale). Questo set di dati è più grande di 200 MB. Ecco un esempio di utilizzo.