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ån sklearn.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 och fetch_lfw_people för att fetch_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.


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow