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 e fetch_lfw_people per il caricamento del set di dati fetch_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.


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow