Nuestros mejores investigadores agotaron sus depósitos de café, por su búsqueda día y noche por la solución, hasta que Max halló el resultado en Bitbucket así que en este momento la compartimos aquí.
Solución:
Puedes usar la clase sklearn.preprocessing.TransformedTargetRegressor
con su clasificador SVM como el regresor y use el inverse_func
argumento para transformar sus etiquetas después de la clasificación.
Sin embargo, desde TransformedTargetRegressor
se supone que debe transformar sus etiquetas en un nuevo espacio antes de ajustarlas y reasignar las predichas al espacio original, espera un array de etiquetas para transformar antes de colocar y no acepta un vacío o None
objetivo como entrada. Por lo tanto, debe proporcionar un objetivo ficticio para su canalización, lo que puede hacer que su código sea un poco confuso.
Ejemplo:
import numpy as np
from sklearn.compose import TransformedTargetRegressor
from sklearn.svm import OneClassSVM
from sklearn.pipeline import Pipeline
X = np.random.random((10, 2))
regressor = OneClassSVM(gamma='auto')
svm = TransformedTargetRegressor(regressor=regressor,
inverse_func=lambda x: (x+1)//2, # Function that remaps your labels
check_inverse=False) # If not set to False, this code will generate an error since the provided inverse_func is not the inverse of the default func argument, which is the identity function
pipeline = Pipeline([
('svm', svm)
])
pipeline.fit(X, np.zeros((1,1))) # An array of fake label is provided to the pipeline
pipeline.predict(X)
Producción:
array([[0],
[1],
[1],
[1],
[1],
[0],
[1],
[0],
[0],
[0]])
Tenga en cuenta que si necesita pasar parámetros a su OneClassSVM
clasificador a través de Pipeline
con un diccionario, por ejemplo en una búsqueda de cuadrícula con GridSearchCV
necesitas agregar regressor__
a su parámetro key nombre entre svm__
y el nombre de su parámetro. Por ejemplo, svm__kernel
se convierte svm__regressor__kernel
.
Desarrollamos PipeGraph, una extensión de Scikit-Learn Pipeline que le permite obtener datos intermedios, crear gráficos como flujos de trabajo y, en particular, resolver este problema (vea los ejemplos en la galería en http://mcasl.github.io/PipeGraph )
Te invitamos a proteger nuestro quehacer poniendo un comentario y valorándolo te lo agradecemos.