Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在决策树的情况下,GridSearchCV和cross_val_分数给出不同的结果_Python_Classification - Fatal编程技术网

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