scikit-learn Handledning
Komma igång med scikit-learning
Sök…
Anmärkningar
scikit-learn
är ett allmänt öppet källkodsbibliotek för dataanalys skriven i python. Det är baserat på andra pythonbibliotek: NumPy, SciPy och matplotlib
scikit-learn
innehåller ett antal implementeringar för olika populära algoritmer för maskininlärning.
Installation av scikit-learning
Den nuvarande stabila versionen av scikit-learning kräver :
- Python (> = 2,6 eller> = 3,3),
- NumPy (> = 1.6.1),
- SciPy (> = 0,9).
För de flesta installations pip
Python pakethanterare kan installera Python och alla dess beroenden:
pip install scikit-learn
För linux-system rekommenderas det dock att använda conda
pakethanteraren för att undvika möjliga byggprocesser
conda install scikit-learn
För att kontrollera att du har scikit-learn
, kör i skalet:
python -c 'import sklearn; print(sklearn.__version__)'
Windows och Mac OSX-installation:
Canopy och Anaconda skickar båda en ny version av scikit-learning , förutom en stor uppsättning vetenskapligt pythonbibliotek för Windows, Mac OSX (även relevant för Linux).
Träna en klassificerare med korsvalidering
Använda iris dataset:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
Data delas upp i tåg- och testuppsättningar. För att göra detta använder train_test_split
funktionen train_test_split
för att dela både X
och y
(data och målvektorer) slumpmässigt med alternativet train_size=0.75
(träningsuppsättningar innehåller 75% av data).
Träningsdatasätt matas in i en k-närmaste grannklassificering . Metodens fit
av klassificeringen passar modellen till data.
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)
Slutligen förutsäga kvalitet på testprovet:
clf.score(X_test, y_test) # Output: 0.94736842105263153
Genom att använda ett par tåg- och testuppsättningar kan vi få en partisk uppskattning av klassificerarens kvalitet på grund av det godtyckliga valet datadelingen. Genom att använda korsvalidering kan vi anpassa klassificeraren till olika tåg / testdelsuppsättningar av data och göra ett genomsnitt över alla noggrannhetsresultat. Funktionen cross_val_score
passar en klassificerare till ingångsdata med korsvalidering. Det kan ta in antalet olika delningar (veck) som ska användas (5 i exemplet nedan).
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)
Skapa rörledningar
Att hitta mönster i data fortsätter ofta i en kedja av databehandlingssteg, t.ex. funktionsval, normalisering och klassificering. I sklearn
används en pipeline av etapper för detta.
Till exempel visar följande kod en pipeline som består av två steg. Den första skalar funktionerna, och den andra tränar en klassificerare på det resulterande förstärkta datasättet:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
När rörledningen har skapats kan du använda den som ett vanligt steg (beroende på dess specifika steg). Här fungerar till exempel rörledningen som en klassificerare. Följaktligen kan vi använda det enligt följande:
# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
Gränssnitt och konventioner:
Olika operationer med data utförs med hjälp av specialklasser.
De flesta av klasserna tillhör en av följande grupper:
- klassificeringsalgoritmer (härledda från
sklearn.base.ClassifierMixin
) för att lösa klassificeringsproblem - regressionsalgoritmer (härledda från
sklearn.base.RegressorMixin
) för att lösa problem med rekonstruktion av kontinuerliga variabler (regressionsproblem) -
sklearn.base.TransformerMixin
(härledda frånsklearn.base.TransformerMixin
) som förbereder data
Data lagras i numpy.array
s (men andra arrayliknande objekt som pandas.DataFrame
s accepteras om de kan konverteras till numpy.array
s)
Varje objekt i datan beskrivs genom uppsättning funktioner, den allmänna konventionen är att dataprov representeras med array, där den första dimensionen är dataprov-id, den andra dimensionen är funktions-ID.
import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)
Output:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
I sklearn
konventionerna innehåller dataset ovan 5 objekt vardera beskrivna av 2 funktioner.
Exempel på datasätt
För att underlätta testningen tillhandahåller sklearn
några inbyggda sklearn.datasets
i sklearn.datasets
modulen. Låt oss till exempel ladda Fishers iris-datasats:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
Du kan läsa fullständig beskrivning, namn på funktioner och namn på klasser ( target_names
). De lagras som strängar.
Vi är intresserade av de data och klasser som lagras i data
och target
. Enligt konvention betecknas de som X
och y
X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
numpy.unique(y)
array([0, 1, 2])
Formerna av X
och y
säger att det finns 150 prover med fyra funktioner. Varje prov tillhör en av följande klasser: 0, 1 eller 2.
X
och y
kan nu användas för att utbilda en klassificerare genom att anropa klassifierarens fit()
-metod.
Här är den fullständiga listan över datamängder som tillhandahålls av sklearn.datasets
modulen med deras storlek och avsedda användning:
Ladda med | Beskrivning | Storlek | Användande |
---|---|---|---|
load_boston() | Boston huspriser-datasätt | 506 | regression |
load_breast_cancer() | Bröstcancer Wisconsin-datasätt | 569 | klassificering (binär) |
load_diabetes() | Diabetesdatasätt | 442 | regression |
load_digits(n_class) | Siffras datasats | 1797 | klassificering |
load_iris() | Iris dataset | 150 | klassificering (flerklass) |
load_linnerud() | Linnerud datasätt | 20 | multivariat regression |
Observera att (källa: http://scikit-learn.org/stable/datasets/) :
Dessa datasätt är användbara för att snabbt illustrera beteendet hos de olika algoritmerna som implementerats i scikit. De är emellertid ofta för små för att vara representativa för verkliga maskininlärningsuppgifter.
Förutom dessa inbyggda leksakseksemplaruppsättningar, sklearn.datasets
också verktygsfunktioner för att ladda externa datasätt:
-
load_mlcomp
för att ladda provdatasätt från mlcomp.org-lagret (Observera att datasätten måste laddas ner innan). Här är ett exempel på användning. -
fetch_lfw_pairs
ochfetch_lfw_people
för attfetch_lfw_pairs
fetch_lfw_people
ansikten i naturen (LFW) -parets datasats från http://vis-www.cs.umass.edu/lfw/ , används för ansiktsverifiering (resp. ansiktsigenkänning). Detta dataset är större än 200 MB. Här är ett exempel på användning.