如何在 GridSearchCV 中使用最佳参数作为分类器的参数?
How to use the best parameter as parameter of a classifier in GridSearchCV?
我有一个名为 svc_param_selection(X, y, n)
的函数,其中 returns best_param_
。
现在我想使用返回的 best_params 作为分类器的参数,例如:
.
parameters = svc_param_selection(X, y, 2)
from sklearn.model_selection import ParameterGrid
from sklearn.svm import SVC
param_grid = ParameterGrid(parameters)
for params in param_grid:
svc_clf = SVC(**params)
print (svc_clf)
classifier2=SVC(**svc_clf)
这里好像参数不是网格..
您可以使用 GridSearchCV 来执行此操作。这里有一个例子:
# Applying GridSearch to find best parameters
from sklearn.model_selection import GridSearchCV
parameters = [{ 'criterion' : ['gini'], 'splitter':['best','random'], 'min_samples_split':[0.1,0.2,0.3,0.4,0.5],
'min_samples_leaf': [1,2,3,4,5]},
{'criterion' : ['entropy'], 'splitter':['best','random'], 'min_samples_split':[0.1,0.2,0.3,0.4,0.5],
'min_samples_leaf': [1,2,3,4,5]} ]
gridsearch = GridSearchCV(estimator = classifier, param_grid = parameters,refit= False, scoring='accuracy', cv=10)
gridsearch = gridsearch.fit(x,y)
optimal_accuracy = gridsearch.best_score_
optimal_parameters = gridsearch.best_params_
但是对于 GridSearchCV
的 param_grid
,您应该为您的分类器传递参数名称和值的字典。例如这样的分类器:
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(random_state=0, presort=True,
criterion='entropy')
classifier = classifier.fit(x_train,y_train)
然后在通过 GridSearchCV
找到最佳参数后,将它们应用到您的模型上。
@Ben 在 gridsearch 开始时,您可以在 param_grid 外部指定分类器(如果您只有一种分类方法要检查)或在 param_grid 内部指定。我只检查了 'inside' 个案例。
首先,我在param_grid中设置了'classifier'键。那就是你最后要的钥匙。
param_grid = [
{'classifier' : [LogisticRegression()],
...
},
{'classifier' : [RandomForestClassifier()],
}
]
例如,gridsearch.best_params_
的结果是:
{'classifier': RandomForestClassifier(criterion='entropy', max_depth=2, n_estimators=2),
'classifier__criterion': 'entropy',
'classifier__max_depth': 2,
'classifier__min_samples_leaf': 1,
'classifier__n_estimators': 2}
然后向这本字典 gridsearch.best_params_
查询您称为 'classifier'
的键。
clfBest = clfGridSearchBest.best_params_['classifier']
clf最佳:
RandomForestClassifier(criterion='entropy', max_depth=2, n_estimators=2)
现在正好适合clfBest。
我有一个名为 svc_param_selection(X, y, n)
的函数,其中 returns best_param_
。
现在我想使用返回的 best_params 作为分类器的参数,例如:
.
parameters = svc_param_selection(X, y, 2)
from sklearn.model_selection import ParameterGrid
from sklearn.svm import SVC
param_grid = ParameterGrid(parameters)
for params in param_grid:
svc_clf = SVC(**params)
print (svc_clf)
classifier2=SVC(**svc_clf)
这里好像参数不是网格..
您可以使用 GridSearchCV 来执行此操作。这里有一个例子:
# Applying GridSearch to find best parameters
from sklearn.model_selection import GridSearchCV
parameters = [{ 'criterion' : ['gini'], 'splitter':['best','random'], 'min_samples_split':[0.1,0.2,0.3,0.4,0.5],
'min_samples_leaf': [1,2,3,4,5]},
{'criterion' : ['entropy'], 'splitter':['best','random'], 'min_samples_split':[0.1,0.2,0.3,0.4,0.5],
'min_samples_leaf': [1,2,3,4,5]} ]
gridsearch = GridSearchCV(estimator = classifier, param_grid = parameters,refit= False, scoring='accuracy', cv=10)
gridsearch = gridsearch.fit(x,y)
optimal_accuracy = gridsearch.best_score_
optimal_parameters = gridsearch.best_params_
但是对于 GridSearchCV
的 param_grid
,您应该为您的分类器传递参数名称和值的字典。例如这样的分类器:
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(random_state=0, presort=True,
criterion='entropy')
classifier = classifier.fit(x_train,y_train)
然后在通过 GridSearchCV
找到最佳参数后,将它们应用到您的模型上。
@Ben 在 gridsearch 开始时,您可以在 param_grid 外部指定分类器(如果您只有一种分类方法要检查)或在 param_grid 内部指定。我只检查了 'inside' 个案例。
首先,我在param_grid中设置了'classifier'键。那就是你最后要的钥匙。
param_grid = [
{'classifier' : [LogisticRegression()],
...
},
{'classifier' : [RandomForestClassifier()],
}
]
例如,gridsearch.best_params_
的结果是:
{'classifier': RandomForestClassifier(criterion='entropy', max_depth=2, n_estimators=2),
'classifier__criterion': 'entropy',
'classifier__max_depth': 2,
'classifier__min_samples_leaf': 1,
'classifier__n_estimators': 2}
然后向这本字典 gridsearch.best_params_
查询您称为 'classifier'
的键。
clfBest = clfGridSearchBest.best_params_['classifier']
clf最佳:
RandomForestClassifier(criterion='entropy', max_depth=2, n_estimators=2)
现在正好适合clfBest。