我尝试在DecisionTreeClassifier上使用GridSearchCV,但是收到以下错误: TypeError:unbound方法get_params()必须使用DecisionTreeClassifier实例作为第一个参数调用(没有任何替代)
这是我的代码:
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.grid_search 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)
答案 0 :(得分:2)
在调用GridSearchCV
方法时,第一个参数应该是DecisionTreeClassifier
的实例化对象,而不是类的名称。它应该是
clf = GridSearchCV(DecisionTreeClassifier(), tree_para, cv=5)
查看示例here以获取更多详细信息。
希望有所帮助!
答案 1 :(得分:1)
您需要在分类器前面添加一个():
clf = GridSearchCV(DecisionTreeClassifier(), tree_para, cv=5)
答案 2 :(得分:0)
如果问题仍然存在,请尝试替换:
from sklearn.grid_search import GridSearchCV
带
from sklearn.model_selection import GridSearchCV
这听起来很愚蠢,但我遇到了类似的问题,我设法用这个技巧解决了这些问题。
答案 3 :(得分:0)
这是决策树网格搜索的代码
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_
答案 4 :(得分:0)
关于参数的另一方面是可以使用不同的参数组合运行网格搜索。下面提到的参数将检查criterion
与max_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}]
在这种情况下,网格搜索将在两组参数上运行,第一组使用criterion
和max_depth
的每种组合,第二组仅针对所有提供的min_samples_leaf
的值>