Looking for scikit-learn Answers? Try Ask4KnowledgeBase
Looking for scikit-learn Keywords? Try Ask4Keywords

scikit-learnErste Schritte mit Scikit-Learn


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).

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 und fetch_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.

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)