Scikit Learn - Convenciones

Los objetos de Scikit-learn comparten una API básica uniforme que consta de las siguientes tres interfaces complementarias:

  • Estimator interface - Sirve para construir y ajustar los modelos.

  • Predictor interface - Es para hacer predicciones.

  • Transformer interface - Es para convertir datos.

Las API adoptan convenciones simples y las opciones de diseño se han guiado de manera que se evite la proliferación de código marco.

Propósito de las convenciones

El propósito de las convenciones es asegurarse de que la API se adhiera a los siguientes principios generales:

Consistency - Todos los objetos, ya sean básicos o compuestos, deben compartir una interfaz coherente que se componga además de un conjunto limitado de métodos.

Inspection - Los parámetros del constructor y los valores de los parámetros determinados por el algoritmo de aprendizaje deben almacenarse y exponerse como atributos públicos.

Non-proliferation of classes - Los conjuntos de datos deben representarse como matrices NumPy o matriz dispersa Scipy, mientras que los nombres y valores de los hiperparámetros deben representarse como cadenas estándar de Python para evitar la proliferación de código de marco.

Composition - Los algoritmos, ya sea que se puedan expresar como secuencias o combinaciones de transformaciones de los datos o que se consideren naturalmente como metaalgoritmos parametrizados en otros algoritmos, deben implementarse y componerse a partir de bloques de construcción existentes.

Sensible defaults- En scikit-learn siempre que una operación requiere un parámetro definido por el usuario, se define un valor predeterminado apropiado. Este valor predeterminado debería hacer que la operación se realice de una manera sensata, por ejemplo, dando una solución de línea base para la tarea en cuestión.

Varias convenciones

Las convenciones disponibles en Sklearn se explican a continuación:

Tipo de fundición

Establece que la entrada se debe convertir a float64. En el siguiente ejemplo, en el quesklearn.random_projection módulo utilizado para reducir la dimensionalidad de los datos, lo explicará -

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

En el ejemplo anterior, podemos ver que X es float32 que se lanza a float64 por fit_transform(X).

Reajuste y actualización de parámetros

Los hiperparámetros de un estimador se pueden actualizar y reajustar después de haber sido construido a través del set_params()método. Veamos el siguiente ejemplo para entenderlo -

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

Una vez que se ha construido el estimador, el código anterior cambiará el kernel predeterminado rbf a lineal vía SVC.set_params().

Ahora, el siguiente código volverá a cambiar el núcleo a rbf para reajustar el estimador y hacer una segunda predicción.

Example

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

Output

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

Código completo

El siguiente es el programa ejecutable completo:

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

Accesorio multiclase y multilabel

En el caso de la adaptación multiclase, tanto el aprendizaje como las tareas de predicción dependen del formato de los datos de destino que se ajustan. El módulo utilizado essklearn.multiclass. Verifique el siguiente ejemplo, donde el clasificador multiclase encaja en una matriz 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])

En el ejemplo anterior, el clasificador se ajusta a una matriz unidimensional de etiquetas multiclase y el predict()por tanto, el método proporciona la correspondiente predicción multiclase. Pero, por otro lado, también es posible encajar en una matriz bidimensional de indicadores de etiquetas binarias de la siguiente manera:

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 manera similar, en caso de ajuste de múltiples etiquetas, a una instancia se le pueden asignar múltiples etiquetas de la siguiente manera:

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

En el ejemplo anterior, sklearn.MultiLabelBinarizerse utiliza para binarizar la matriz bidimensional de múltiples etiquetas para encajar. Es por eso que la función predict () da una matriz 2d como salida con múltiples etiquetas para cada instancia.