Scikit Learn - Konwencje
Obiekty Scikit-learn mają wspólny jednolity podstawowy interfejs API, który składa się z następujących trzech uzupełniających się interfejsów -
Estimator interface - Służy do budowania i dopasowywania modeli.
Predictor interface - Służy do przewidywania.
Transformer interface - Służy do konwersji danych.
Interfejsy API przyjmują proste konwencje, a wybory projektowe są kierowane w sposób zapobiegający rozprzestrzenianiu się kodu platformy.
Cel konwencji
Celem konwencji jest upewnienie się, że API przestrzega następujących ogólnych zasad -
Consistency - Wszystkie obiekty, czy to podstawowe, czy złożone, muszą mieć wspólny interfejs składający się z ograniczonego zestawu metod.
Inspection - Parametry konstruktora i wartości parametrów określone przez algorytm uczący się powinny być przechowywane i ujawniane jako atrybuty publiczne.
Non-proliferation of classes - Zestawy danych powinny być reprezentowane jako tablice NumPy lub macierze rzadkie Scipy, podczas gdy nazwy i wartości hiperparametrów powinny być reprezentowane jako standardowe ciągi znaków Pythona, aby uniknąć mnożenia się kodu platformy.
Composition - Algorytmy, bez względu na to, czy można je wyrazić jako sekwencje, czy też kombinacje przekształceń danych, czy też naturalnie postrzegane jako meta-algorytmy sparametryzowane na innych algorytmach, powinny zostać wdrożone i złożone z istniejących bloków konstrukcyjnych.
Sensible defaults- W scikit-learn ilekroć operacja wymaga parametru zdefiniowanego przez użytkownika, definiowana jest odpowiednia wartość domyślna. Ta wartość domyślna powinna spowodować, że operacja zostanie wykonana w rozsądny sposób, na przykład podając rozwiązanie bazowe dla wykonywanego zadania.
Różne konwencje
Konwencje dostępne w Sklearn są wyjaśnione poniżej -
Rzutowanie typów
Stwierdza, że wejście powinno być rzutowane float64. W poniższym przykładzie, w którymsklearn.random_projection moduł służący do zmniejszenia wymiarowości danych, wyjaśni to -
Example
import numpy as np
from sklearn import random_projection
rannge = np.random.RandomState(0)
X = range.rand(10,2000)
X = np.array(X, dtype = 'float32')
X.dtype
Transformer_data = random_projection.GaussianRandomProjection()
X_new = transformer.fit_transform(X)
X_new.dtype
Output
dtype('float32')
dtype('float64')
W powyższym przykładzie widzimy, że X to float32 do którego jest rzucany float64 przez fit_transform(X).
Dopasowanie i aktualizacja parametrów
Hiperparametry estymatora można aktualizować i ponownie instalować po jego skonstruowaniu za pomocą set_params()metoda. Zobaczmy następujący przykład, aby to zrozumieć -
Example
import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
X, y = load_iris(return_X_y = True)
clf = SVC()
clf.set_params(kernel = 'linear').fit(X, y)
clf.predict(X[:5])
Output
array([0, 0, 0, 0, 0])
Po skonstruowaniu estymatora powyższy kod zmieni domyślne jądro rbf do linear przez SVC.set_params().
Teraz poniższy kod zmieni jądro z powrotem na rbf, aby ponownie dopasować estymator i wykonać drugą prognozę.
Example
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])
Output
array([0, 0, 0, 0, 0])
Kompletny kod
Poniżej znajduje się kompletny program wykonywalny -
import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
X, y = load_iris(return_X_y = True)
clf = SVC()
clf.set_params(kernel = 'linear').fit(X, y)
clf.predict(X[:5])
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])
Okucie wieloklasowe i Multilabel
W przypadku dopasowania wieloklasowego, zarówno zadania uczenia, jak i predykcji zależą od formatu dopasowanych danych docelowych. Zastosowany moduł tosklearn.multiclass. Sprawdź poniższy przykład, w którym klasyfikator wieloklasowy pasuje do tablicy 1d.
Example
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import LabelBinarizer
X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]]
y = [0, 0, 1, 1, 2]
classif = OneVsRestClassifier(estimator = SVC(gamma = 'scale',random_state = 0))
classif.fit(X, y).predict(X)
Output
array([0, 0, 1, 1, 2])
W powyższym przykładzie klasyfikator pasuje do jednowymiarowej tablicy etykiet wieloklasowych i predict()metoda zapewnia zatem odpowiednie przewidywanie wieloklasowe. Ale z drugiej strony możliwe jest również dopasowanie do dwuwymiarowej tablicy binarnych wskaźników etykiet w następujący sposób -
Example
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import LabelBinarizer
X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]]
y = LabelBinarizer().fit_transform(y)
classif.fit(X, y).predict(X)
Output
array(
[
[0, 0, 0],
[0, 0, 0],
[0, 1, 0],
[0, 1, 0],
[0, 0, 0]
]
)
Podobnie, w przypadku dopasowania wielu etykiet, do wystąpienia można przypisać wiele etykiet w następujący sposób -
Example
from sklearn.preprocessing import MultiLabelBinarizer
y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]]
y = MultiLabelBinarizer().fit_transform(y)
classif.fit(X, y).predict(X)
Output
array(
[
[1, 0, 1, 0, 0],
[1, 0, 1, 0, 0],
[1, 0, 1, 1, 0],
[1, 0, 1, 1, 0],
[1, 0, 1, 0, 0]
]
)
W powyższym przykładzie sklearn.MultiLabelBinarizersłuży do binaryzacji dwuwymiarowej tablicy multilabel, do której pasują. Dlatego funkcja Predict () podaje tablicę 2D jako dane wyjściowe z wieloma etykietami dla każdej instancji.