如果 param_grid 中的内核=线性,如何选择 LinearSVC 而不是 SVC?
How to choose LinearSVC instead of SVC if kernel=linear in param_grid?
我有以下方法来创建grid_cv_object。其中 hyperpam_grid={"C":c, "kernel":kernel, "gamma":gamma, "degree":degree}
.
grid_cv_object = GridSearchCV(
estimator = SVC(cache_size=cache_size),
param_grid = hyperpam_grid,
cv = cv_splits,
scoring = make_scorer(matthews_corrcoef), # a callable returning single value, binary and multiclass labels are supported
n_jobs = -1, # use all processors
verbose = 10,
refit = refit
)
这里的内核可以是('rbf', 'linear', 'poly')
例如
如何为 'linear' 内核强制选择 LinearSVC?由于它嵌入在 hyperparam_grid
中,我不确定如何创建这种“开关”。
如果可能的话,我只是不想有 2 个单独的 grid_cv_object。
尝试按以下形式制作参数网格
from sklearn.dummy import DummyClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
search_spaces = [
{'svm': [SVC(kernel='rbf')],
'svm__gamma': ('scale', 'auto'),
'svm__C': (0.1, 1.0, 10.0)},
{'svm': [SVC(kernel='poly')],
'svm__degree': (2, 3),
'svm__C': (0.1, 1.0, 10.0)},
{'svm': [LinearSVC()], # Linear kernel
'svm__C': (0.1, 1.0, 10.)}
]
svm_pipe = Pipeline([('svm', DummyClassifier())])
grid = GridSearchCV(svm_pipe, search_spaces)
讨论:
我们将不同的内核与 SVC
的不同实例分开。这样,GridSearchCV
就不会用不同的 gamma
估计 SVC(kernel='poly')
,而 'poly'
会忽略它们,而只会为 rbf
指定。
根据您的要求,LinearSVC
(实际上是任何其他模型)而不是 SVC(kernel='linear')
被分开以估计线性 svm。
最佳估算器将是 grid.best_estimator_.named_steps['svm']
。
我有以下方法来创建grid_cv_object。其中 hyperpam_grid={"C":c, "kernel":kernel, "gamma":gamma, "degree":degree}
.
grid_cv_object = GridSearchCV(
estimator = SVC(cache_size=cache_size),
param_grid = hyperpam_grid,
cv = cv_splits,
scoring = make_scorer(matthews_corrcoef), # a callable returning single value, binary and multiclass labels are supported
n_jobs = -1, # use all processors
verbose = 10,
refit = refit
)
这里的内核可以是('rbf', 'linear', 'poly')
例如
如何为 'linear' 内核强制选择 LinearSVC?由于它嵌入在 hyperparam_grid
中,我不确定如何创建这种“开关”。
如果可能的话,我只是不想有 2 个单独的 grid_cv_object。
尝试按以下形式制作参数网格
from sklearn.dummy import DummyClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
search_spaces = [
{'svm': [SVC(kernel='rbf')],
'svm__gamma': ('scale', 'auto'),
'svm__C': (0.1, 1.0, 10.0)},
{'svm': [SVC(kernel='poly')],
'svm__degree': (2, 3),
'svm__C': (0.1, 1.0, 10.0)},
{'svm': [LinearSVC()], # Linear kernel
'svm__C': (0.1, 1.0, 10.)}
]
svm_pipe = Pipeline([('svm', DummyClassifier())])
grid = GridSearchCV(svm_pipe, search_spaces)
讨论:
我们将不同的内核与
SVC
的不同实例分开。这样,GridSearchCV
就不会用不同的gamma
估计SVC(kernel='poly')
,而'poly'
会忽略它们,而只会为rbf
指定。根据您的要求,
LinearSVC
(实际上是任何其他模型)而不是SVC(kernel='linear')
被分开以估计线性 svm。最佳估算器将是
grid.best_estimator_.named_steps['svm']
。