Scikit Learn - Conventions

Les objets de Scikit-learn partagent une API de base uniforme qui se compose des trois interfaces complémentaires suivantes -

  • Estimator interface - C'est pour la construction et le montage des modèles.

  • Predictor interface - C'est pour faire des prédictions.

  • Transformer interface - C'est pour convertir des données.

Les API adoptent des conventions simples et les choix de conception ont été guidés de manière à éviter la prolifération du code-cadre.

Objet des conventions

Le but des conventions est de s'assurer que l'API respecte les grands principes suivants -

Consistency - Tous les objets, qu'ils soient basiques ou composites, doivent partager une interface cohérente qui se compose en outre d'un ensemble limité de méthodes.

Inspection - Les paramètres du constructeur et les valeurs des paramètres déterminés par l'algorithme d'apprentissage doivent être stockés et exposés en tant qu'attributs publics.

Non-proliferation of classes - Les ensembles de données doivent être représentés sous forme de tableaux NumPy ou de matrice scipy sparse, tandis que les noms et valeurs des hyper-paramètres doivent être représentés sous forme de chaînes Python standard pour éviter la prolifération du code cadre.

Composition - Les algorithmes, qu'ils soient exprimables sous forme de séquences ou de combinaisons de transformations des données ou bien naturellement considérés comme des méta-algorithmes paramétrés sur d'autres algorithmes, doivent être mis en œuvre et composés à partir de blocs de construction existants.

Sensible defaults- Dans scikit-learn chaque fois qu'une opération nécessite un paramètre défini par l'utilisateur, une valeur par défaut appropriée est définie. Cette valeur par défaut devrait entraîner l'exécution de l'opération d'une manière raisonnable, par exemple, en donnant une solution de base pour la tâche à accomplir.

Diverses conventions

Les conventions disponibles dans Sklearn sont expliquées ci-dessous -

Type de moulage

Il indique que l'entrée doit être convertie en float64. Dans l'exemple suivant, dans lequelsklearn.random_projection module utilisé pour réduire la dimensionnalité des données, l'expliquera -

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

Dans l'exemple ci-dessus, nous pouvons voir que X est float32 qui est jeté à float64 par fit_transform(X).

Réaménagement et mise à jour des paramètres

Les hyper-paramètres d'un estimateur peuvent être mis à jour et réajustés après sa construction via le set_params()méthode. Voyons l'exemple suivant pour le comprendre -

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

Une fois l'estimateur construit, le code ci-dessus changera le noyau par défaut rbf à linéaire via SVC.set_params().

Maintenant, le code suivant rétablira le noyau en rbf pour refaire l'estimateur et faire une seconde prédiction.

Example

clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y)
clf.predict(X[:5])

Output

array([0, 0, 0, 0, 0])

Code complet

Ce qui suit est le programme exécutable complet -

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

Raccord multiclasse et multi-étiquettes

En cas d'ajustement multiclasse, les tâches d'apprentissage et de prédiction dépendent du format de l'ajustement des données cibles. Le module utilisé estsklearn.multiclass. Consultez l'exemple ci-dessous, où le classificateur multiclasse est adapté à un tableau 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])

Dans l'exemple ci-dessus, le classificateur est ajusté sur un tableau dimensionnel d'étiquettes multiclasses et le predict()La méthode fournit donc une prédiction multiclasse correspondante. Mais d'un autre côté, il est également possible d'ajuster sur un tableau bidimensionnel d'indicateurs d'étiquettes binaires comme suit -

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

De même, dans le cas d'un ajustement à étiquettes multiples, une instance peut se voir attribuer plusieurs étiquettes comme suit -

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

Dans l'exemple ci-dessus, sklearn.MultiLabelBinarizerest utilisé pour binariser le tableau bidimensionnel de multilabels à ajuster. C'est pourquoi la fonction predict () donne un tableau 2d en sortie avec plusieurs étiquettes pour chaque instance.