scikit-learn Samouczek
Rozpoczęcie pracy ze scikit-learn
Szukaj…
Uwagi
scikit-learn
to ogólnodostępna biblioteka typu open source do analizy danych napisana w języku python. Opiera się na innych bibliotekach Pythona: NumPy, SciPy i matplotlib
scikit-learn
zawiera szereg implementacji różnych popularnych algorytmów uczenia maszynowego.
Instalacja scikit-learn
Obecna stabilna wersja scikit-learn wymaga :
- Python (> = 2.6 lub> = 3.3),
- NumPy (> = 1.6.1),
- SciPy (> = 0,9).
W przypadku większości instalacji menedżer pakietów python pip
może zainstalować Pythona i wszystkie jego zależności:
pip install scikit-learn
Jednak w przypadku systemów Linux zaleca się użycie menedżera pakietów conda
, aby uniknąć możliwych procesów kompilacji
conda install scikit-learn
Aby sprawdzić, czy masz scikit-learn
, uruchom w powłoce:
python -c 'import sklearn; print(sklearn.__version__)'
Instalacja systemu Windows i Mac OSX:
Zarówno Canopy, jak i Anaconda dostarczają najnowszą wersję scikit-learn , oprócz dużego zestawu naukowej biblioteki python dla systemu Windows, Mac OSX (dotyczy również Linuksa).
Przećwicz klasyfikator z walidacją krzyżową
Za pomocą zestawu danych tęczówki:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
Dane są dzielone na zestawy pociągów i testów. Aby to zrobić, używamy funkcji narzędzia train_test_split
do train_test_split
podziału zarówno X
i y
(wektory danych i wektorów docelowych) z opcją train_size=0.75
(zestawy treningowe zawierają 75% danych).
Zestawy danych szkoleniowych są wprowadzane do k-najbliższego klasyfikatora sąsiadów . Metoda fit
klasyfikatora dopasuje model do danych.
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)
Wreszcie przewidywanie jakości na próbce testowej:
clf.score(X_test, y_test) # Output: 0.94736842105263153
Używając jednej pary zestawów pociągów i testów, możemy uzyskać tendencyjne oszacowanie jakości klasyfikatora z powodu arbitralnego wyboru podziału danych. Za pomocą walidacji krzyżowej możemy dopasować klasyfikator do różnych podzbiorów danych pociągu / testu i uzyskać średnią dla wszystkich wyników dokładności. Funkcja cross_val_score
dopasowuje klasyfikator do danych wejściowych przy użyciu weryfikacji krzyżowej. Jako wejście może przyjąć liczbę różnych podziałów (fałdów), które zostaną użyte (5 w poniższym przykładzie).
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)
Tworzenie rurociągów
Znalezienie wzorców w danych często przebiega w szeregu etapów przetwarzania danych, np. Wyboru cech, normalizacji i klasyfikacji. W sklearn
wykorzystuje się do tego szereg etapów.
Na przykład poniższy kod pokazuje potok składający się z dwóch etapów. Pierwszy skaluje cechy, a drugi trenuje klasyfikator na wynikowym rozszerzonym zestawie danych:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
Po utworzeniu potoku możesz go używać jak zwykłego etapu (w zależności od jego konkretnych kroków). Tutaj na przykład potok zachowuje się jak klasyfikator. W związku z tym możemy użyć go w następujący sposób:
# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
Interfejsy i konwencje:
Różne operacje na danych są wykonywane przy użyciu specjalnych klas.
Większość klas należy do jednej z następujących grup:
- algorytmy klasyfikacji (pochodzące ze
sklearn.base.ClassifierMixin
) w celu rozwiązania problemów z klasyfikacją - algorytmy regresji (pochodzące ze
sklearn.base.RegressorMixin
) w celu rozwiązania problemu rekonstrukcji zmiennych ciągłych (problem regresji) - transformacje danych (pochodzące ze
sklearn.base.TransformerMixin
), które wstępnie przetwarzają dane
Dane są przechowywane w numpy.array
s (ale inne obiekty podobne do tablicy, takie jak pandas.DataFrame
s są akceptowane, jeśli można je przekształcić w numpy.array
s)
Każdy obiekt w danych jest opisany przez zestaw cech, ogólna konwencja jest taka, że próbka danych jest reprezentowana przez tablicę, gdzie pierwszy wymiar to identyfikator próbki danych, a drugi wymiar to identyfikator cechy.
import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)
Output:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
W konwencjach sklearn
powyższy zestaw danych zawiera 5 obiektów, każdy opisany przez 2 funkcje.
Przykładowe zestawy danych
Dla ułatwienia testowania, sklearn
udostępnia niektóre wbudowane zestawy danych w module sklearn.datasets
. Na przykład załadujmy zestaw danych tęczówki Fishera:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
Możesz przeczytać pełny opis, nazwy funkcji i nazwy klas ( target_names
). Są one przechowywane jako ciągi znaków.
Interesują nas dane i klasy, które są przechowywane w data
i polach target
. Zgodnie z konwencją są one oznaczone jako X
i y
X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
numpy.unique(y)
array([0, 1, 2])
Kształty X
i y
mówią, że istnieje 150 próbek z 4 funkcjami. Każda próbka należy do jednej z następujących klas: 0, 1 lub 2.
X
i y
można teraz wykorzystać do szkolenia klasyfikatora, wywołując metodę fit()
klasyfikatora.
Oto pełna lista zestawów danych dostarczonych przez moduł sklearn.datasets
wraz z ich rozmiarem i przeznaczeniem:
Załaduj z | Opis | Rozmiar | Stosowanie |
---|---|---|---|
load_boston() | Zestaw danych o cenach domów w Bostonie | 506 | regresja |
load_breast_cancer() | Rak piersi Zbiór danych Wisconsin | 569 | klasyfikacja (binarna) |
load_diabetes() | Zestaw danych o cukrzycy | 442 | regresja |
load_digits(n_class) | Zestaw danych cyfr | 1797 | Klasyfikacja |
load_iris() | Zestaw danych Iris | 150 | klasyfikacja (wieloklasowa) |
load_linnerud() | Zestaw danych Linnerud | 20 | regresja wielowymiarowa |
Uwaga: (źródło: http://scikit-learn.org/stable/datasets/) :
Te zestawy danych są przydatne do szybkiego zilustrowania zachowania różnych algorytmów zaimplementowanych w programie scikit. Są jednak często zbyt małe, aby reprezentować rzeczywiste zadania uczenia maszynowego.
Oprócz tych wbudowanych przykładowych zestawów danych zabawki, sklearn.datasets
zapewnia również funkcje narzędziowe do ładowania zewnętrznych zestawów danych:
-
load_mlcomp
do ładowania przykładowych zestawów danych z repozytorium mlcomp.org (zwróć uwagę, że zestawy danych należy pobrać wcześniej). Oto przykład użycia. -
fetch_lfw_pairs
ifetch_lfw_people
do wczytywania zestawu danych par etykietowanych twarzy na wolności (LFW) z http://vis-www.cs.umass.edu/lfw/ , służących do weryfikacji twarzy (lub rozpoznawania twarzy). Ten zestaw danych jest większy niż 200 MB. Oto przykład użycia.