Python 在决策树的情况下,GridSearchCV和cross_val_分数给出不同的结果
使用Python 在决策树的情况下,GridSearchCV和cross_val_分数给出不同的结果,python,classification,Python,Classification,使用GridSearchCVbest_score并将best_params从GridSearchCV放置到cross_val_score,我得到了不同的结果。这只发生在决策树和随机森林的情况下。而在“SVM”、“KNN”、“LR”的情况下,结果是相同的。 以下是我正在使用的代码: def dtree_param_selection(X,y): #create a dictionary of all values we want to test param_grid = { 'cr
GridSearchCV
best_score
并将best_params
从GridSearchCV
放置到cross_val_score
,我得到了不同的结果。这只发生在决策树和随机森林的情况下。而在“SVM”、“KNN”、“LR”的情况下,结果是相同的。以下是我正在使用的代码:
def dtree_param_selection(X,y):
#create a dictionary of all values we want to test
param_grid = { 'criterion':['gini','entropy'],'max_features':["auto", "sqrt", "log2"],'max_depth': np.arange(2, 20)}
# decision tree model
dtree_model=DecisionTreeClassifier()
#use gridsearch to test all values
dtree_gscv = GridSearchCV(dtree_model, param_grid, cv=10)
#fit model to data
dtree_gscv.fit(X, y)
print(dtree_gscv.best_score_)
return dtree_gscv.best_params_
dtree_param_selection(good_feature,label)
交叉评分
:
clf = DecisionTreeClassifier(dtree_gscv.best_params_)
acc = cross_val_score(clf,good_feature,label,cv=10)
对于基于树的模型,您应该在训练之前设置
随机_状态
参数。它默认为None
。这将确保结果相同
从:
random\u state int或RandomState,默认值=None
如果int,则random_state是随机数生成器使用的种子;如果为RandomState实例,则random_state为随机数生成器;如果没有,则随机数生成器是np.random使用的RandomState实例
对于基于树的模型,您应该在训练之前设置
随机_状态
参数。它默认为None
。这将确保结果相同
从:
random\u state int或RandomState,默认值=None
如果int,则random_state是随机数生成器使用的种子;如果为RandomState实例,则random_state为随机数生成器;如果没有,则随机数生成器是np.random使用的RandomState实例
问题可能是由于GridSearchCV和cross_val_分数使用不同的随机种子创建的树模型造成的。如果是这种情况,您应该能够通过显式设置随机状态来修复它。如果要从
GridSearchCV.best_params
创建clf
,则应在参数网格中包含random_state
,即:
...
param_grid = { 'random_state': [0], ... }
...
解决此问题的另一种方法是,如果直接在cross val函数中使用GridSearchCV的最佳模型,以确保不会遗漏任何超参数:
acc = cross_val_score(dtree_gscv.best_model_, good_feature,label, cv=10)
问题可能是由于GridSearchCV和cross_val_分数使用不同的随机种子创建的树模型造成的。如果是这种情况,您应该能够通过显式设置随机状态来修复它。如果要从
GridSearchCV.best_params
创建clf
,则应在参数网格中包含random_state
,即:
...
param_grid = { 'random_state': [0], ... }
...
解决此问题的另一种方法是,如果直接在cross val函数中使用GridSearchCV的最佳模型,以确保不会遗漏任何超参数:
acc = cross_val_score(dtree_gscv.best_model_, good_feature,label, cv=10)
我们能在随机状态下应用网格搜索来找出最佳值吗?是的,你能做到。您只需要在参数网格中为
random_state
分配一个值数组。我们可以对random state应用网格搜索来找出最佳值吗?是的,您可以这样做。您只需将一个值数组分配给参数网格中的random_state
。