Scikit-learn在DecisionTreeClassifier上使用GridSearchCV

16

我试图在DecisionTreeClassifier上使用GridSearchCV,但遇到以下错误:

TypeError: unbound method get_params() must be called with DecisionTreeClassifier instance as first argument (got nothing instead)

这是我的代码:

from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import GridSearchCV
from sklearn.cross_validation import  cross_val_score

X, Y = createDataSet(filename)
tree_para = {'criterion':['gini','entropy'],'max_depth':[4,5,6,7,8,9,10,11,12,15,20,30,40,50,70,90,120,150]}
clf = GridSearchCV(DecisionTreeClassifier, tree_para, cv=5)
clf.fit(X, Y)
5个回答

13

在调用GridSearchCV方法时,第一个参数应该是DecisionTreeClassifier的实例化对象,而不是类的名称。应该是:

clf = GridSearchCV(DecisionTreeClassifier(), tree_para, cv=5)

点击这里查看更多详细信息。

希望对您有所帮助!


8
另一个关于参数的方面是,网格搜索可以运行不同组合的参数。以下的参数将检查不同的criterionmax_depth组合。
tree_param = {'criterion':['gini','entropy'],'max_depth':[4,5,6,7,8,9,10,11,12,15,20,30,40,50,70,90,120,150]}

如果需要的话,可以针对多个参数候选集运行网格搜索:
例如:
tree_param = [{'criterion': ['entropy', 'gini'], 'max_depth': max_depth_range},
              {'min_samples_leaf': min_samples_leaf_range}]

在这种情况下,将对两组参数运行网格搜索。首先使用每个和的所有组合进行搜索,其次仅针对提供的所有值进行搜索。

3

这里是决策树网格搜索的代码

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

def dtree_grid_search(X,y,nfolds):
    #create a dictionary of all values we want to test
    param_grid = { 'criterion':['gini','entropy'],'max_depth': np.arange(3, 15)}
    # decision tree model
    dtree_model=DecisionTreeClassifier()
    #use gridsearch to test all values
    dtree_gscv = GridSearchCV(dtree_model, param_grid, cv=nfolds)
    #fit model to data
    dtree_gscv.fit(X, y)
    return dtree_gscv.best_params_

2
您需要在分类器后面添加一个():
clf = GridSearchCV(DecisionTreeClassifier(), tree_para, cv=5)

1
如果问题仍然存在,请尝试替换:

from sklearn.grid_search import GridSearchCV

带有。
from sklearn.model_selection import GridSearchCV

听起来很蠢,但我遇到了类似的问题,并成功地使用这个提示解决了它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接