Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

345
Views
Omita las combinaciones de parámetros prohibidos al usar GridSearchCV

Quiero buscar con avidez todo el espacio de parámetros de mi clasificador de vectores de soporte usando GridSearchCV . Sin embargo, algunas combinaciones de parámetros están prohibidas por LinearSVC y lanzan una excepción . En particular, existen combinaciones mutuamente excluyentes de los parámetros dual , penalty y loss :

Por ejemplo, este código:

 from sklearn import svm, datasets from sklearn.model_selection import GridSearchCV iris = datasets.load_iris() parameters = {'dual':[True, False], 'penalty' : ['l1', 'l2'], \ 'loss': ['hinge', 'squared_hinge']} svc = svm.LinearSVC() clf = GridSearchCV(svc, parameters) clf.fit(iris.data, iris.target)

Devuelve ValueError: Unsupported set of arguments: The combination of penalty='l2' and loss='hinge' are not supported when dual=False, Parameters: penalty='l2', loss='hinge', dual=False

Mi pregunta es: ¿es posible hacer que GridSearchCV omita combinaciones de parámetros que el modelo prohíbe? Si no, ¿existe una manera fácil de construir un espacio de parámetros que no viole las reglas?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Resolví este problema pasando error_score=0.0 a GridSearchCV :

error_score: 'raise' (predeterminado) o numérico

Valor a asignar a la puntuación si se produce un error en el ajuste del estimador. Si se establece en 'elevar', se genera el error. Si se proporciona un valor numérico, se genera FitFailedWarning. Este parámetro no afecta el paso de reacondicionamiento, que siempre generará el error.

ACTUALIZACIÓN: las versiones más nuevas de sklearn imprimen un montón de ConvergenceWarning y FitFailedWarning . Tuve dificultades para suprimirlos con contextlib.suppress , pero hay un truco que involucra un administrador de contexto de prueba:

 from sklearn import svm, datasets from sklearn.utils._testing import ignore_warnings from sklearn.exceptions import FitFailedWarning, ConvergenceWarning from sklearn.model_selection import GridSearchCV with ignore_warnings(category=[ConvergenceWarning, FitFailedWarning]): iris = datasets.load_iris() parameters = {'dual':[True, False], 'penalty' : ['l1', 'l2'], \ 'loss': ['hinge', 'squared_hinge']} svc = svm.LinearSVC() clf = GridSearchCV(svc, parameters, error_score=0.0) clf.fit(iris.data, iris.target)
over 4 years ago · Santiago Trujillo Report

0

Si desea evitar por completo la exploración de combinaciones específicas (sin esperar a encontrar errores), debe construir la cuadrícula usted mismo. GridSearchCV puede tomar una lista de dictados, donde se exploran las cuadrículas abarcadas por cada diccionario en la lista.

En este caso, la lógica condicional no era tan mala, pero sería realmente tediosa para algo más complicado:

 from sklearn import svm, datasets from sklearn.model_selection import GridSearchCV from itertools import product iris = datasets.load_iris() duals = [True, False] penaltys = ['l1', 'l2'] losses = ['hinge', 'squared_hinge'] all_params = list(product(duals, penaltys, losses)) filtered_params = [{'dual': [dual], 'penalty' : [penalty], 'loss': [loss]} for dual, penalty, loss in all_params if not (penalty == 'l1' and loss == 'hinge') and not ((penalty == 'l1' and loss == 'squared_hinge' and dual is True)) and not ((penalty == 'l2' and loss == 'hinge' and dual is False))] svc = svm.LinearSVC() clf = GridSearchCV(svc, filtered_params) clf.fit(iris.data, iris.target)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!