scikit-learn Tutorial
Erste Schritte mit Scikit-Learn
Suche…
Bemerkungen
scikit-learn
ist eine allgemeine Open-Source-Bibliothek für die Datenanalyse in Python. Es basiert auf anderen Python-Bibliotheken: NumPy, SciPy und Matplotlib
scikit-learn
enthält eine Reihe von Implementierungen für verschiedene gängige Algorithmen des maschinellen Lernens.
Installation von Scikit-Learn
Die aktuelle stabile Version von scikit-learn erfordert :
- Python (> = 2,6 oder> = 3,3),
- NumPy (> = 1.6.1),
- SciPy (> = 0,9).
Für die meisten Installations- pip
Paketmanager Python und alle seine Abhängigkeiten installieren:
pip install scikit-learn
Bei Linux-Systemen wird jedoch empfohlen, den conda
Package Manager zu verwenden, um mögliche conda
zu vermeiden
conda install scikit-learn
Um zu überprüfen, ob Sie scikit-learn
, führen Sie es in der Shell aus:
python -c 'import sklearn; print(sklearn.__version__)'
Windows- und Mac OSX-Installation:
Canopy und Anaconda bieten eine aktuelle Version von Scikit-Learn sowie eine große Sammlung wissenschaftlicher Python-Bibliotheken für Windows, Mac OSX (auch für Linux relevant).
Trainieren Sie einen Klassifikator mit Kreuzvalidierung
Verwenden des Iris-Datasets:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
Die Daten werden in Zug- und Testsets aufgeteilt. Dazu verwenden wir die Utility-Funktion train_test_split
, um X
und y
(Daten- und train_size=0.75
) mit der Option train_size=0.75
(zufällig 75% der Daten) zufällig zu train_size=0.75
.
Trainingsdatensätze werden in einen k nächstgelegenen Nachbarnklassifizierer eingespeist. Das Verfahren fit
des Klassifikators wird das Modell zu den Daten passen.
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)
Zum Schluss Vorhersage der Qualität der Testprobe:
clf.score(X_test, y_test) # Output: 0.94736842105263153
Durch die Verwendung eines Paares von Zug- und Testsätzen könnten wir aufgrund der willkürlichen Auswahl der Datenaufteilung eine verzerrte Einschätzung der Qualität des Klassifizierers erhalten. Durch die Verwendung der Kreuzvalidierung können wir den Klassifikator an verschiedene Zug- / Test-Teilmengen der Daten anpassen und einen Durchschnitt aller Genauigkeitsergebnisse machen. Die Funktion cross_val_score
passt einen Klassifikator an die Eingabedaten unter Verwendung der Kreuzvalidierung an. Es kann die Anzahl der zu verwendenden Splits (Falten) (5 im folgenden Beispiel) als Eingabe übernehmen.
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)
Pipelines erstellen
Das Auffinden von Mustern in Daten erfolgt häufig in einer Kette von Datenverarbeitungsschritten, z. B. Merkmalsauswahl, Normalisierung und Klassifizierung. In sklearn
wird dazu eine Pipeline von Stufen verwendet.
Der folgende Code zeigt beispielsweise eine Pipeline, die aus zwei Stufen besteht. Die erste skaliert die Features und die zweite bildet einen Klassifizierer für das resultierende erweiterte Dataset aus:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
Nachdem die Pipeline erstellt wurde, können Sie sie wie eine reguläre Phase verwenden (abhängig von den jeweiligen Schritten). Hier verhält sich beispielsweise die Pipeline wie ein Klassifikator. Folglich können wir es wie folgt verwenden:
# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
Schnittstellen und Konventionen:
Verschiedene Operationen mit Daten werden mit speziellen Klassen durchgeführt.
Die meisten Klassen gehören zu einer der folgenden Gruppen:
- Klassifizierungsalgorithmen (abgeleitet von
sklearn.base.ClassifierMixin
) zur Lösung von Klassifizierungsproblemen - Regressionsalgorithmen (abgeleitet von
sklearn.base.RegressorMixin
) zur Lösung des Problems der Rekonstruktion kontinuierlicher Variablen (Regressionsproblem) - Datentransformationen (abgeleitet von
sklearn.base.TransformerMixin
), die die Daten vorverarbeiten
Daten werden in numpy.array
s gespeichert (andere Array-ähnliche Objekte wie pandas.DataFrame
s werden jedoch akzeptiert, wenn diese in numpy.array
s konvertierbar sind).
Jedes Objekt in den Daten wird durch eine Reihe von Merkmalen beschrieben. Die allgemeine Konvention besteht darin, dass Datenmuster mit einem Array dargestellt werden, wobei die erste Dimension die Datenmuster-ID und die zweite Dimension die Feature-ID ist.
import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)
Output:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
In den sklearn
Konventionen enthält das sklearn
Dataset 5 Objekte, die jeweils durch 2 Merkmale beschrieben werden.
Beispieldatensätze
Um das Testen zu sklearn
stellt sklearn
einige integrierte Datensätze im Modul sklearn.datasets
. Lassen Sie uns beispielsweise Fisher's Iris-Dataset laden:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
Sie können die vollständige Beschreibung, die Namen der Features und die Namen der Klassen ( target_names
) target_names
. Diese werden als Zeichenfolgen gespeichert.
Wir sind an den Daten und Klassen interessiert, die in data
und target
gespeichert sind. Konventionell werden diese als X
und y
X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
numpy.unique(y)
array([0, 1, 2])
Formen von X
und y
besagen, dass es 150 Proben mit 4 Merkmalen gibt. Jedes Beispiel gehört zu einer der folgenden Klassen: 0, 1 oder 2.
X
und y
können jetzt beim Trainieren eines Klassifikators verwendet werden, indem die Methode fit()
des Klassifizierers fit()
wird.
Hier ist die vollständige Liste der vom Modul sklearn.datasets
bereitgestellten Datensätze mit ihrer Größe und beabsichtigten Verwendung:
Laden mit | Beschreibung | Größe | Verwendungszweck |
---|---|---|---|
load_boston() | Boston-Hauspreis-Datensatz | 506 | Regression |
load_breast_cancer() | Brustkrebs Wisconsin-Datensatz | 569 | Klassifizierung (binär) |
load_diabetes() | Diabetes-Datensatz | 442 | Regression |
load_digits(n_class) | Ziffern-Datensatz | 1797 | Einstufung |
load_iris() | Iris-Datensatz | 150 | Klassifizierung (Multi-Class) |
load_linnerud() | Linnerud-Datensatz | 20 | multivariate Regression |
Beachten Sie, dass (Quelle: http://scikit-learn.org/stable/datasets/) :
Diese Datensätze sind hilfreich, um das Verhalten der verschiedenen im Scikit implementierten Algorithmen schnell zu veranschaulichen. Sie sind jedoch oft zu klein, um für maschinelle Lernaufgaben in der realen Welt repräsentativ zu sein.
Neben diesen integrierten Beispieldatensätzen für Spielzeug bietet sklearn.datasets
auch sklearn.datasets
zum Laden externer Datensätze:
-
load_mlcomp
zum Laden von Beispiel-Datasets aus dem mlcomp.org- Repository (Beachten Sie, dass die Datasets zuvor heruntergeladen werden müssen). Hier ist ein Verwendungsbeispiel. -
fetch_lfw_pairs
undfetch_lfw_people
zum Laden von LFW-Paare (fetch_lfw_people
Faces in the Wild) -Paar von http://vis-www.cs.umass.edu/lfw/ , zur Gesichtsüberprüfung (bzw. Gesichtserkennung). Dieser Datensatz ist größer als 200 MB. Hier ist ein Verwendungsbeispiel.